';密封类中的受保护成员';警告(单例类)
本文关键字:警告 单例类 密封类 受保护 成员 | 更新日期: 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所说的
类型声明受保护的成员,以便继承类型可以访问或覆盖成员。根据定义,不能从密封继承类型,这意味着密封类型上的受保护方法不能呼叫。
当您自己审查代码时,请考虑一下。就你所能看到的而言,你看到了一些毫无意义的东西。有几种可能的可能性:
- 开发商做了一些愚蠢的事
- 开发人员做了一些太聪明的事情,目的对你来说并不明显
- 开发人员做了一些合理的事情,但由于同时发生的变化,这些事情不再有意义
- 开发人员做了一些还没有意义的事情,但如果有计划的更改发生,就会这样做
在第一种情况下,他们应该修复它
在第二种情况下,他们应该记录下来
在第三种情况下,他们应该改变它;它在实际中不会有什么不同,但代码会更有意义,并且可能会带来一些小的性能优势。
在第四种情况下,他们应该暂时将其记录下来,要么做出改变,要么尽早退出。
不管怎样,你都想和他们讨论一下。
这里也是一样,在密封类中添加受保护的成员是没有意义的。我不知道你为什么这么做,也不能决定上面四种情况中的哪一种适用,但其中一种适用。警告强调了这一点。根据四种情况中的哪一种有效,采取四种行动中适用的行动。
我说你在玩C#。说真的
在静态类中,据说我们不能声明受保护的成员,因为静态类不能实例化。事实上,当我们在静态类中编写受保护的成员时,它会在构建过程中引发错误
在密封类中,它将在生成过程中抛出警告。我想像静态类一样,密封类也应该给出ERROR而不是WARNING。如果这种差异应该存在,那么为什么?