在下面的示例中,我定义了数字字段。这个领域将按照我的意愿运作,但它不足以提供我的期望。
数值是每个类的固定值,数字不是依赖实例,数字是支持多态。我怎样才能做到这一点 ?或者是否有另一种不使用不必要的数字字段的解决方案?
abstract class Main
{
public int number;
public virtual void dostuff(){
int x = number;
}
}
class Derived:Main
{
public ovverride void dostuff(){
int x = number;
}
}
答案 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;
}
}
看起来我得到了错误的结尾 - 你希望能够按类别静态设置,这已经得到了解答。