我正在编写一个WebPart,这意味着我从System.Web.UI.WebControls.WebParts.WebPart
继承并覆盖方法protected override void CreateChildControls()
。
但是,如果可能的话,我想创建类sealed
,但这会产生两个问题:只需密封类就会发出警告“在密封类中声明的新受保护成员”。
将访问修饰符从protected
更改为private
或internal
会产生编译错误,告诉我在继承时无法更改修饰符。
这让我感到疑惑:密封它并忽略警告是否有任何问题?或者这会导致任何进一步的负面影响吗? 似乎工作正常,但魔鬼通常在细节中。
编辑:我只是愚蠢。 “新受保护的成员”错误是针对一个确实未被覆盖的函数,并且只是意外地声明为protected
。感谢Pragma-Tip!
答案 0 :(得分:5)
你确定你正确地覆盖了吗?我个人无法重复这种行为。但如果它让你担心,你可以使用
#pragma warning disable 0628
// Offending code
#pragma warning restore 0628
答案 1 :(得分:5)
子类可以看到受保护的成员,因此您稍微改变了类的接口;如果你宣称它是“私有的”,它只能在本地看到,所以它不会影响界面。
声明您的方法私有不受保护,警告应该消失。
答案 2 :(得分:4)
它说在课堂上声明了一个 new 受保护的成员这一事实略显令人担忧。
嗯......我无法在简单的测试代码中重现这一点:
using System;
public class Base
{
protected virtual void Foo()
{
}
}
public sealed class Derived : Base
{
protected override void Foo()
{
}
}
使用.NET 3.5SP1编译时没有警告。你肯定覆盖了基本方法吗?检查您是否确实拥有override
修饰符。 (对不起,如果这听起来很光顾 - 我不是要指责你松懈或任何事情。我只是难倒......否则......)
答案 3 :(得分:0)
听起来像傻瓜一样。我忽略了这个警告,毕竟它只是说你正在做的事情就像在抽象类型上有一个公共ctor一样不合逻辑。最糟糕的情况是有点混乱。
我认为我也有这个,但仅限于Compact Framework代码,在这种情况下是完整框架吗?