【问题标题】:Different static member values on derived classes [duplicate]派生类上的不同静态成员值[重复]
【发布时间】:2013-07-28 20:56:04
【问题描述】:

当我写作时:

public class A
{
    public static int v;
}
public class B : A { }
public class C : A { }

A.vB.vC.v 的值都相同。
如何让它们存储不同的静态值?

【问题讨论】:

  • 你不能,这是静态的一方面。
  • 如果你不想要那个效果,那你为什么要从同一个类派生呢?
  • 看起来您需要实例行为...为什么要将其设为静态?
  • 例如 B.v 将被其实例使用,并且对于所有 B 实例都是相同的。但是 C.v 应该不同。我推导它们是因为我需要... 会有很多方法应该从 A 推导出来。

标签: c#


【解决方案1】:

A.v、B.v 和 C.v 的值都相同。
如何让它们存储不同的静态值?

你不能; A.vB.vC.v 都引用同一个静态字段,所以它们不能有不同的值。

一种可能的解决方法是在BC 中重新声明v

public class A
{
    public static int v;
}
public class B : A
{
    public static new int v;
}
public class C : A
{
    public static new int v;
}

如果您这样做,A.vB.vC.v 将有效地引用不同的字段,因此它们可以具有不同的值。

(注意new 修饰符;它告诉编译器您有意将成员隐藏在基类中)

根据您的具体需求,faester 的解决方案可能会更好。

【讨论】:

  • 如果不重新声明它们或类似的东西似乎是不可能的。
【解决方案2】:

不要将它们设为静态,而是使用虚拟只读属性来获得相同的效果:

public class A
{
    public virtual int v { get { return 1; } }
}

public class B : A { }

public class C : A
{
    public override int v
    {
        get { return 2; } 
    }
}

【讨论】:

    猜你喜欢
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2023-03-23
    相关资源
    最近更新 更多