受保护的成员在密封的班级

Mic*_*tum 1 .net c#

我正在写一个WebPart,这意味着我继承System.Web.UI.WebControls.WebParts.WebPart并且我重写了该方法protected override void CreateChildControls().

但是,sealed如果可能的话,我想创建这个类,但这会产生两个问题:只是密封类会给出一个警告"在密封类中声明的新受保护成员".

将访问修饰符更改protectedprivateinternal给出编译器错误,告诉我在继承时无法更改修饰符.

这让我感到疑惑:密封它并忽略警告是否有任何问题?或者这会导致任何进一步的负面影响吗?它似乎工作得很好,但魔鬼通常在细节.

编辑:我只是愚蠢."新受保护的成员"错误是针对一个确实未被覆盖的函数,并且只是意外声明为protected.感谢Pragma-Tip!

Chr*_*oot 6

子类可以看到受保护的成员,因此您稍微改变了类的接口; 如果你宣称它是'私有的',它只能在本地看到,所以它不会影响界面.

声明您的方法私有不受保护,警告应该消失.

  • 从常规类重构为单例时,我遇到了这个问题.这是我正在寻找的答案.当你真正想到它时,你可以轻松一点.如果某个方法在"密封"的类中,为什么会被"保护"?永远不会有派生类......所以警告告诉您,您正在编写与类权限相矛盾的代码.它会工作,但警告很好.+1到widgisoft! (2认同)

Ant*_*lev 5

你确定你正确地覆盖了吗?我个人无法重复这种行为.但如果它让你担心,你可以使用

#pragma warning disable 0628
// Offending code
#pragma warning restore 0628
Run Code Online (Sandbox Code Playgroud)