I was writing a class in c#.
I stumbled upon the this piece of suggestion offered by a code refactor. And i didnt
get what exactly the tool meant when it offered this suggestion/improvement.
Situation :
I was using this.Text property to set the title in the constructor of my Form class.
Form()
{
//some initialization code ...
//...
this.Text = "Non modal form"; //Suggestion offered here..
}
The code refactor tool prompted a warning : saying accessing virtual member
To correct this the tool automatically added a property
public override sealed string Text
{
get { return base.Text; }
set { base.Text = value; }
}
Can anyone explain me how, adding a sealed property will affect/improve the situation.
Cheers
You are calling a virtual member in a constructor. There is no gaurentee that YOUR code will run if the class is inherited and that property is called. Making it sealed prevents this as it can not be overridden in child classes. This shouldn't affect anything in this specific example.
It will help since no derived classes can override
it.
As you are dealing with a Form
, another option would be to just move your initialization code to the Load
event handler (as described by Jon Skeet here):
Load += delegate
{
this.Text = "Non modal form";
};
Using the Load event is much simpler than creating sealed properties, especially if you are accessing more than one virtual property.
Since you are setting a virtual
property in your constructor, refactoring tool is suggesting to seal the property so that the value cannot be changed in the inherited classes it cannot be overriden in the inherited classes.
This does not improve performance, nor it makes sense in the scenario you have (a Form
). So I would just ignore it.
InitiliseComponents
? So in this context (which is not exactly a nested hierarchy) I would ignore it. - Aliostad