特定のプロパティを定義する変更できないスーパークラスが与えられた場合、サブクラスでそのデフォルト値を設定するにはどうすればよいですか?
たとえば、サブクラス化System.Windows.Forms.ToolStripButton
を行っていて、プロパティのデフォルト値を設定したいとしText
ます。(より複雑な例として、たとえば、クリック ハンドラーも定義したいと思います
Click += new EventHandler(click)
)。
私が持っていたいくつかのアイデア:
コンストラクタで設定します。しかし、複数のコンストラクターを使用すると、それは実現可能ですか? (コンストラクターが互いにどのように機能するかについては、まだしっかりと把握できていません。1 つだけ更新して、すべて Just Work™ にすることはできますか?)
フィールドとして設定します。つまり
public string Text = "foo";
、予想どおり、これは機能しません。これらの値を設定するには、常に特定のメソッドを呼び出します (たとえば、名前を付ける場合があります
InitializeComponent
)。
理想的には、このクラスをさらにサブクラス化し、デフォルト値を定義したいと考えています。その側では、フィールドを保護し、コンストラクターまたはメソッドにそれらの値を読み取らせて割り当てさせると思います。
私に思い浮かばなかった他の方法はありますか?
または、私のデザインが正しくないように見えますか? 別のクラスを使用して、そのToolStripButton
中のインスタンスを操作することもできます (継承ではなく集約)。(考えれば考えるほど、これが正解な気がします。)
これは、私が Python で行う方法を正確に知っている種類のものですが、C# ではあまり洗練されていないように見えます (私は知っています: 言語のさまざまなスタイル、トレードオフなど。C# を批判しているわけではありません)。