C#继承的成员变量表现不正常

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"!为什么会这样,如果不在构造函数中设置变量,我怎样才能使它工作?

dtb*_*dtb 6

这之间的区别overridenew.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)