【发布时间】:2011-09-01 20:07:30
【问题描述】:
如果您声明的继承层次结构中父类和子类都具有相同名称和参数的静态方法*,Visual Studio 将引发警告CS0108:
例子:
public class BaseClass
{
public static void DoSomething()
{
}
}
public class SubClass : BaseClass
{
public static void DoSomething()
{
}
}
: warning CS0108: 'SubClass.DoSomething()' hides inherited member 'BaseClass.DoSomething()'. Use the new keyword if hiding was intended.
为什么这被认为是隐藏方法?这两种方法都不涉及继承层次结构,只能使用类名调用:
BaseClass.DoSomething();
SubClass.DoSomething();
或者,在类本身中不合格。无论哪种情况,调用哪个方法都没有歧义(即没有“隐藏”)。
*有趣的是,这些方法可能因返回类型而异,但仍会产生相同的警告。但是,如果方法参数类型不同,则不会生成警告。
请注意,我并不是要为静态继承或任何其他此类废话创建论据或讨论。
【问题讨论】:
-
有一点是肯定的——方法在 c# 中不因返回类型而异。静态不是这种情况,每种方法都是如此。它们也没有区别于它们的访问修饰符
标签: c# .net inheritance static