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

时间:2013-06-19 13:06:51

标签: c# .net static static-members member-hiding

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

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 个答案:

答案 0 :(得分:0)

无法将对象与静态字段/成员/函数关联,因此静态字段/成员/函数也无法在继承中显示。