以下代码是否应该给出警告?
让我再做进一步的修改:
class Foo { public void Do() { /*...*/ } /*...*/ }
class Bar : Foo { public static void Do() { /*...*/ } /*...*/ }
它会给出以下警告:
"警告 CS0108: 'Bar.Do()' 隐藏了继承成员 'Foo.Do()'。如果是有意隐藏,请使用 new 关键字。"
如果我对代码进行更改:
class Foo { public static void Do() { /*...*/ } /*...*/ }
class Bar : Foo { public void Do() { /*...*/ } /*...*/ }
我也收到了同样的警告。
但是,如果我做出以下更改,警告就会消失。
class Foo { public void Do() { /*...*/ } /*...*/ }
class Bar : Foo { new public static void Do() { /*...*/ } /*...*/ }
让我再做进一步的修改:
class Foo { public void Do() { /*...*/ } /*...*/ }
class Bar : Foo {
new public static void Do()
{ new Bar().Do();/*...*/ } /*...*/
}
以下代码无法编译:
“错误 CS0176:成员‘Bar.Do()’无法通过实例引用访问;请改用类型名称限定它。”
因此,我通过实例引用从静态方法中失去了对继承方法的访问权限!
这背后的逻辑是什么?或者是我哪里打错了?
我在尝试为我的派生自“Form”的表单定义一个静态方法“Show”时遇到了这个问题。
ExpressionVisitor
:想要静态的Visit
以及实例)。我认为它实际上简化了语言,因为它符合用户的期望 - 我们期望方法组应该根据上下文(类型或实例)进行过滤,并且期望编译器是聪明的。 - NetMage