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



给定以下类,C#编译器给了我这个警告:

CS0108 "'B.示例' 隐藏继承的成员 'A.示例(字符串('。如果打算隐藏,请使用 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;
}

在第二个示例中,示例(字符串/整数(的两个方法实现都将可见。所以没有隐藏由 B 类实现:

class B
{
    public string Example(string something);
    public string Example(int another);
}

相关内容

  • 没有找到相关文章

最新更新