私はc#でクラスを書いていました。
私は、コードリファクタによって提供されたこの提案についてつまずいた。そして私はしなかった
それがこの提案/改善を提供したときにツールが正確に何を意味したかを手に入れてください。
状況 :
私のFormクラスのコンストラクタでタイトルを設定するのにthis.Textプロパティを使っていました。
Form()
{
//some initialization code ...
//...
this.Text = "Non modal form"; //Suggestion offered here..
}
コードリファクタリングツールから警告が表示されました。仮想メンバーへのアクセスです
これを修正するために、ツールは自動的にプロパティを追加しました
public override sealed string Text
{
get { return base.Text; }
set { base.Text = value; }
}
誰もが私に説明することができますか、密封されたプロパティを追加すると状況に影響を与える/改善することができます。
乾杯
あなたはコンストラクタで仮想メンバを呼び出しています。クラスが継承され、そのプロパティが呼び出された場合にあなたのコードが実行されるという保証人はいません。それを封印すると、子クラスでは上書きできないため、これを防ぎます。これは、この特定の例では何も影響しません。
派生クラスができないのでそれは役立ちますoverride
それ。
あなたが扱っているようにForm
もう1つの選択肢は、初期化コードをLoad
イベントハンドラ(Jon Skeetによる記述のとおり)ここに):
Load += delegate
{
this.Text = "Non modal form";
};
特に複数の仮想プロパティにアクセスしている場合は、Loadイベントを使用する方が封印されたプロパティを作成するよりもはるかに簡単です。
あなたが設定しているのでvirtual
あなたのコンストラクタのプロパティでは、リファクタリングツールはプロパティが継承クラスでは値を変更できません継承クラスではオーバーライドできません。
これはパフォーマンスを向上させるものではなく、またあなたが持っているシナリオでは意味がありません。Form
)それを無視します。
InitiliseComponents
?したがって、この文脈(これは厳密にネストされた階層ではありません)では無視します。 - Aliostad