this-Me
this-Me

Reputation: 2145

Usage of the sealed string property in c#

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

Upvotes: 4

Views: 1762

Answers (4)

Aliostad
Aliostad

Reputation: 81680

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.

Upvotes: 1

Dirk Vollmar
Dirk Vollmar

Reputation: 176229

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.

Upvotes: 1

jgauffin
jgauffin

Reputation: 101166

It will help since no derived classes can override it.

Upvotes: 1

Chris Kooken
Chris Kooken

Reputation: 33930

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.

Upvotes: 5

Related Questions