为什么我会收到有关隐藏基类方法的属性的警告CS0108

时间:2018-01-17 11:01:26

标签: c# compiler-warnings

鉴于以下类,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";
}

是否有一些特殊的属性可以使编译器警告有效,或者这是编译器中的误报?

1 个答案:

答案 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);
}