一个字段是每个类的固定值,字段不是依赖实例......?

时间:2010-07-16 11:03:42

标签: c# design-patterns oop

在下面的示例中,我定义了数字字段。这个领域将按照我的意愿运作,但它不足以提供我的期望。

数值是每个类的固定值,数字不是依赖实例,数字是支持多态。我怎样才能做到这一点 ?或者是否有另一种不使用不必要的数字字段的解决方案?

abstract class Main
{
    public int number;
    public virtual void dostuff(){
        int x = number;
    }
}
class Derived:Main
{

    public ovverride void dostuff(){
        int x = number;
    }
}

2 个答案:

答案 0 :(得分:0)

您可以将属性设置为静态,然后将其添加到每个类中:

   abstract class Main
{
    public static int number;
    public virtual void dostuff(){
        int x = Main.number;
    }
}
class Derived : Main
{
    public static int number;
    public overide void dostuff(){
        int x = Derived.number;
    }
}

编辑:我对你对多态性的评论感到有些困惑,所以我增加了一些例子。

Main obj = new Derived();
obj.doStuff(); //This will use Derived.number; as doStuff is and overidden virtual method.

但是,如果您执行以下操作:

abstract class Main
{
    public static int number;
    public void dostuff(){
        int x = Main.number;
    }
}
class Derived : Main
{
    public static int number;
    public new void dostuff(){
        int x = Derived.number;
    }
}

然后你会得到如下不同的行为:

Main obj = new Derived();
obj.doStuff() // Will use Main.number
Derived obj2 = (Derived)obj;
obj2.doStuff() // Will use Derived.number

如果你想要其他一些我没有在这里定义的行为,请exaplin,因为我不明白你想要什么。

答案 1 :(得分:0)

您可以将数字设为属性,并在每个类构造函数中初始化:

abstract class Main
{
    public int number{get; private set;}

    public void dostuff(){
        int x = number;
    }
}

class Derived:Main
{
    public Derived()
    {
        number = 5; // Specific value for each derived class
    }
    public void dostuff(){
        int x = number;
    }
}

看起来我得到了错误的结尾 - 你希望能够按类别静态设置,这已经得到了解答。