关于.net 2.0:在c#中使用密封字符串属性

Usage of the sealed string property in c#

我在写一门C的课。

我偶然发现了代码重构器提供的这一条建议。而我没有

了解该工具在提供此建议/改进时的确切含义。

情况:

我使用此.text属性在窗体类的构造函数中设置标题。

1
2
3
4
5
6
7
8
Form()
{
   //some initialization code ...

   //...

   this.Text ="Non modal form";           //Suggestion offered here..
}

代码重构工具提示一个警告:说访问虚拟成员

要更正此问题,工具会自动添加一个属性

1
2
3
4
5
  public override sealed string Text
   {
        get { return base.Text; }
        set { base.Text = value; }
   }

谁能给我解释一下,添加一个密封属性将如何影响/改善这种情况?

干杯


您正在调用构造函数中的虚拟成员。如果类是继承的,并且调用了该属性,那么您的代码就不会运行gaurentee。使其密封可以防止这种情况发生,因为它不能在子类中被重写。这不应该影响这个特定示例中的任何内容。


当您处理一个Form时,另一个选项是将初始化代码移动到Load事件处理程序(如jon skeet在这里描述的那样):

1
2
3
4
Load += delegate
{
    this.Text ="Non modal form";  
};

使用加载事件比创建密封属性简单得多,尤其是当您访问多个虚拟属性时。


它将有所帮助,因为没有派生类可以实现cx1〔2〕。


由于您正在构造函数中设置virtual属性,因此重构工具建议密封该属性,以便继承类中的值不能更改it cannot be overriden in the inherited classes.

这并不能提高性能,在您的场景中也没有意义(一个Form)。所以我会忽略它。