Переопределить статические поля в производных / вложенных классах в C#
У меня есть класс со статическим полем и статической функцией, например, вот так
public class A {
protected static string[] _eventField = new[] { "SomeValue" };
public static TOut DoSomethingThatDependsOnEventField(TIn input){
//output depends on input and the static _eventField
}
public class Nested1: A {
protected new static string[] _eventField = new[] { "SomethingDifferent" };
}
public class Nested2 : A {
protected new static string[] _eventField = new[] { "SomethingElse" };
}
}
Типы вывода и ввода этого статического метода здесь не важны, единственное, что важно, это то, что вывод - несмотря на то, что он зависит от ввода - конечно, зависит от содержимого статического поля. Реализация метода вообще не меняется в производных классах, и все, что я хочу, это изменить это очень статичное поле. Но всякий раз, когда я делаю звонок как
var res1 = A.Nested1.DoSomethingThatDependsOnEventField(...);
или var res2 = A.Nested2.DoSomethingThatDependsOnEventField(...);
неверное статическое поле из базового класса A указывается в методе. То есть предполагаемое "сокрытие" / "переопределение" статического поля через protected new static string[] _eventField = ...
не работает - Почему это так?
1 ответ
У вас не может быть объекта, связанного со Статическим полем / элементом / функцией, поэтому статическое поле / элемент / функция также не может быть отображено в Inheritance.