鉴于以下类,C# 编译器会向我发出此警告:-
CS0108“‘B.Example’隐藏继承的成员‘A.Example(string)’。如果打算隐藏,请使用 new 关键字”。
class A
{
public string Example(string something)
{
return something;
}
}
class B : A
{
public string Example => "B";
}
如果使用运行此代码的类
class Program
{
static void Main(string[] args)
{
B b = new B();
Console.WriteLine(b.Example("A"));
Console.WriteLine(b.Example);
}
}
我得到以下输出
A
B
这正是我所期望的。
在我看来,根本没有隐藏任何事情。的确
如果 B 类实际上包含一个像这样的简单方法重载,那么我不会收到等效的警告。
class B : A
{
public string Example(int another) => "B";
}
使该编译器警告有效的属性是否有什么特殊之处,或者这是编译器中误报的情况?
您的第一个示例类 B 将具有属性“Example”,从而隐藏方法 Example(string) 并且编译器要求您指定 new 关键字以阐明您的意图:
class B
{
public string Example;
}
在第二个示例中,Example(string/int) 的两种方法实现都是可见的。所以 B 类实现没有隐藏:
class B
{
public string Example(string something);
public string Example(int another);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)