Nil*_*ert 0 c# variables inheritance class member
如果我有这样的课程:
class A {
public string fe = "A";
}
Run Code Online (Sandbox Code Playgroud)
还有一个继承自它的类:
class B : A {
public string fe = "B";
}
Run Code Online (Sandbox Code Playgroud)
Visual C#会告诉我B.fe隐藏A.fe所以我应该使用new关键字.所以我改变B级看起来像:
class B : A {
public new string fe = "B";
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个函数,它接受A(但是,通过继承,也将采用B),如下所示:
class D {
public static void blah(A anAObject) {
Console.Writeline(A.fe);
}
}
Run Code Online (Sandbox Code Playgroud)
即使我传递一个B对象的实例,它将毫无疑问地打印出来,它将打印出"A"!为什么会这样,如果不在构造函数中设置变量,我怎样才能使它工作?
这之间的区别override
和new
.new
定义一个恰好与基类中的成员同名的成员.它不会覆盖该成员.因此,如果您有一个需要A
实例的方法,它将获取A.fe
具有相同名称的派生类中的成员而不是该成员的值.
override
改为使用属性:
class A {
public virtual string fe { get { return "A"; } }
}
class B : A {
public override string fe { get { return "B"; } }
}
Run Code Online (Sandbox Code Playgroud)