在父方法中访问子级的静态属性

Fra*_*lva 3 c# c#-3.0

说我有以下代码:

class Parent
{

    static string MyField = "ParentField";

    public virtual string DoSomething()
    {
        return MyField;
    }
}

class Child : Parent
{
    static new string MyField = "ChildField";
}
Run Code Online (Sandbox Code Playgroud)

现在我希望能够做到以下两点:

Console.WriteLine(Parent.MyField);
Console.WriteLine(Child.MyField);
Run Code Online (Sandbox Code Playgroud)

这些工作按预期工作,但我也想这样做:

Child c = new Child();
Console.WriteLine(c.DoSomething());
Run Code Online (Sandbox Code Playgroud)

因为没有为Child类定义DoSomething(),所以返回了Parent的MyField,但我想要的是Child的MyField.

所以我的问题是:我有什么方法可以做到这一点?

注意:覆盖Child类中的方法是一个选项,但由于我将从Parent继承许多Child类,并且该方法应该在所有这些中执行相同的操作,因此更改此方法中的某些内容会带来很多麻烦.

Bry*_*tts 7

如果您发现自己需要一种不受语言支持的构造,在这种情况下static virtual成员,这是一种气味,表明您可能有错误的设计.

而不是向我们展示解决方案,向我们展示您尝试使用该解决方案解决的问题.我的猜测是,有一个完全不同的设计,消除了这种奇怪的需要.

换句话说:你收到的答案不是你想要的答案,因为你问的问题不是你应该问的问题.我认为所提出的设计不会带来另一种更传统的设计所带来的好处.