说我有以下代码:
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类,并且该方法应该在所有这些中执行相同的操作,因此更改此方法中的某些内容会带来很多麻烦.
如果您发现自己需要一种不受语言支持的构造,在这种情况下static virtual成员,这是一种气味,表明您可能有错误的设计.
而不是向我们展示解决方案,向我们展示您尝试使用该解决方案解决的问题.我的猜测是,有一个完全不同的设计,消除了这种奇怪的需要.
换句话说:你收到的答案不是你想要的答案,因为你问的问题不是你应该问的问题.我认为所提出的设计不会带来另一种更传统的设计所带来的好处.