BaseTypeオブジェクトがたくさんあるとし、DerivedType B、CまたはDのすべてに対してアクションAを実行する必要があるとします。また、必要なメソッドがないため、BaseTypeのインスタンスにはできません。私の場合は、ASP.NET Webフォームページ上の特定のタイプのすべてのコントロールにクラスを割り当てる必要があり、コードは次のようになります。一部の派生型にしか存在しないメソッドを呼び出す
if (myControl != null)
{
foreach (var input in myControl.Controls.OfType<TextBox>())
{
input.CssClass = "my-class";
}
foreach (var input in myControl.Controls.OfType<DropDownList>())
{
input.CssClass = "my-class";
}
foreach (var input in myControl.Controls.OfType<RadioButtonList>())
{
input.CssClass = "my-class";
}
foreach (var input in myControl.Controls.OfType<CheckBox>())
{
input.CssClass = "my-class";
}
}
代替はすべてmyControl.Controlsし、チェックをループにありますDerivedType Xとしてのコントロールが各コントロールとそれぞれのDerivedTypeについてnullでない場合、私はそれらのそれぞれに全く同じことをするために興味があります。
ここに明白な何かが欠けているのだろうか(多型がどのように機能するか完全に理解できない場合)。 This questionは、カスタムクラスのためにそれを行う方法に関する一般的なアイデアを提供しますが、残念ながら私はコントロールがついていません。
上記の作業を行う上手な方法はありますか?
ありがとうございます!
_polymorphism_ではなく_abstractions_を意味すると思います。なぜならクライアントコードは一般的にその型が気にかからないからです。あなたのコードはオブジェクト型をテストしているので、抽象化をうまく利用していません。 Webコントロールは_polymorphism_ – MickyD