我正在尝试覆盖程序中的属性。 这基本上就是我要做的事情:
class A { public int test = 7; }
class B : A { public int test = 8; }
class Program
{
static void Main(string[] args)
{
A test1 = new A();
A test2 = new B();
Console.WriteLine(test1.test);
Console.WriteLine(test2.test);
}
}
当我希望它在第二种情况下显示8时,这两种情况都会显示7 ....
我尝试过虚拟和覆盖以及新的(public new int test = 8;) 但它似乎不起作用
是的,我知道我应该使用私人和吸气剂。我只是想知道它是否可能?
编辑:我不是本地C#程序员,所以如果我混合使用这些术语(例如字段和属性),请原谅我!
答案 0 :(得分:3)
我正在尝试覆盖程序中的属性。
class A { public int test = 7; }
问题是int test
不是属性,而是公共字段。字段无法覆盖。
以下是覆盖属性的示例:
class A {
public virtual int test {
get {return 7;}
}
}
class B : A {
public override int test {
get {return 8;}
}
}
答案 1 :(得分:1)
test
是一个字段,而不是属性。您必须将其更改为属性并添加virtual
修饰符以允许在子类中覆盖它。然后,您必须使用override
关键字覆盖类B
中返回的值:
class A
{
public virtual int test
{
get { return 7; }
}
}
class B : A
{
public override int test
{
get { return 8; }
}
}
答案 2 :(得分:-1)
更改此
A test2 = new B();
用这个
B test2 = new B();
如果您将test2创建为A,则调用A方法