';密封类中的受保护成员';警告(单例类)

本文关键字:警告 单例类 密封类 受保护 成员 | 更新日期: 2023-09-27 18:19:57

我实现了一个singleton类,并不断收到警告,我正在编写的方法是"在密封类中声明的新受保护成员"它不会影响构建,但我真的不想忽略警告,以防以后出现问题?我知道密封类是一个不能继承的类,所以它的方法不能被重写,但我仍然不明白为什么下面的代码会给我警告(这是因为使用了singleton设计吗?):

namespace WPFSurfaceApp
{
public sealed class PresentationManager
{
    PresentationManager()
    {
    }
    protected void MethodName()
    {
    }
    public static PresentationManager Instance
    {
        get
        {
            return Nested.instance;
        }
    }
    class Nested
    {
        // Explicit static constructor to tell C# compiler
        // not to mark type as beforefieldinit
        static Nested()
        {
        }
        internal static readonly PresentationManager instance = new PresentationManager();
    }
}

EDIT:警告是关于MethodName()方法的。编辑:将公共void MethodName()更改为受保护的void MethodName

警告是因为protected在无法继承的类中没有意义。它在逻辑上将与sealed类的private完全相同。

这本身并不是一个错误,但编译器试图让您注意这样一个事实,即将其设为protected而不是private不会给您带来任何好处,而且可能不会按照您的意图进行操作(如果您希望它对子类可见,而子类不可能存在于密封类中)。

所以,是的,您可以安全地忽略它,但在sealed类中有protected成员在逻辑上是不一致的。

MSDN编译器条目警告CS0628

';密封类中的受保护成员';警告(单例类)

这是显而易见的,因为它没有任何意义。如果类不能继承,受保护成员将有什么用途

正如MSDN所说的

类型声明受保护的成员,以便继承类型可以访问或覆盖成员。根据定义,不能从密封继承类型,这意味着密封类型上的受保护方法不能呼叫。

当您自己审查代码时,请考虑一下。就你所能看到的而言,你看到了一些毫无意义的东西。有几种可能的可能性:

  1. 开发商做了一些愚蠢的事
  2. 开发人员做了一些太聪明的事情,目的对你来说并不明显
  3. 开发人员做了一些合理的事情,但由于同时发生的变化,这些事情不再有意义
  4. 开发人员做了一些还没有意义的事情,但如果有计划的更改发生,就会这样做

在第一种情况下,他们应该修复它

在第二种情况下,他们应该记录下来

在第三种情况下,他们应该改变它;它在实际中不会有什么不同,但代码会更有意义,并且可能会带来一些小的性能优势。

在第四种情况下,他们应该暂时将其记录下来,要么做出改变,要么尽早退出。

不管怎样,你都想和他们讨论一下。

这里也是一样,在密封类中添加受保护的成员是没有意义的。我不知道你为什么这么做,也不能决定上面四种情况中的哪一种适用,但其中一种适用。警告强调了这一点。根据四种情况中的哪一种有效,采取四种行动中适用的行动。

我说你在玩C#。说真的
在静态类中,据说我们不能声明受保护的成员,因为静态类不能实例化。事实上,当我们在静态类中编写受保护的成员时,它会在构建过程中引发错误
在密封类中,它将在生成过程中抛出警告。我想像静态类一样,密封类也应该给出ERROR而不是WARNING。如果这种差异应该存在,那么为什么?