在c#中重新定义派生/嵌套类中的静态字段

本文关键字:嵌套 静态 字段 派生 定义 新定义 | 更新日期: 2023-09-27 18:18:59

我有一个带有静态字段和静态函数的类,例如:

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 = ...的静态字段的预期"隐藏"/"重新定义"不起作用- 为什么会这样?

在c#中重新定义派生/嵌套类中的静态字段

不能有与静态字段/成员/函数相关联的对象,所以静态字段/成员/函数也不能在继承中出现