鉴于以下类,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";
}
是否有一些特殊的属性可以使编译器警告有效,或者这是编译器中的误报?
答案 0 :(得分:0)
您的第一个示例类B将具有Property"示例",从而隐藏方法Example(字符串),并且编译器要求您指定新关键字以阐明您的意图:
class B
{
public string Example;
}
在第二个示例中,将显示Example(string / int)的两个方法实现。所以没有隐藏在B类实现中:
class B
{
public string Example(string something);
public string Example(int another);
}