私は以下のSOの記事を読みました
- C#: 派生クラスの静的メソッドから基本クラスの静的メソッドを呼び出すにはどうすればよいですか?
- 各派生クラスが独自の静的プロパティのコピーを持つ基底クラスを作成できますか?
- 静的メソッドの継承に代わる正しい方法は何ですか?
すべてが私の質問に非常に近いようで、良い答えがありますが、メソッドを非静的にする必要があると言う以外に、私の質問には答えていないようです。
例:
abstract public class baseClass
{
private static List<string> attributeNames = new List(new string {"property1","property2"});
// code for property definition and access
virtual public static bool ValidAttribtue(string attributeName)
{
if (attributeNames.Contains(attributeName))
return true;
else
return false;
}
}
class derivedA : baseClass
{
private static List<string> attributeNames = new List(new string {"property3","property4"});
// code for property definition and access
public static override bool ValidAttribute(string attributeName)
{
if (attributeNames.Contains(attributeName))
{
return true;
}
else
{
return base.ValidAttribute(attributeName);
}
}
}
class derivedB : baseClass
{
private static List<string> attributeNames = new List(new string {"property10","property11"});
// code for property definition and access
public static override bool ValidAttribute(string attributeName)
{
if (attributeNames.Contains(attributeName))
{
return true;
}
else
{
return base.ValidAttribute(attributeName);
}
}
}
派生 A にはプロパティ 1、2、3、4 があり、派生 B にはプロパティ 1、2、10、11 があります。プロパティのリストはクラス固有の値のようで、いつでも変更できません。その場合、静的になると思います。
静的メソッドを使用してはならないときに使用しようとしているという意味で、私の設計は間違っていますか?
上記の例では、静的メソッドの継承が必要になると思いますが、これを実行しようとするのは設計上の欠陥のようです。この方法でクラスをコーディングまたは構造化することの何が問題なのかを理解するのを手伝ってくれる人はいますか?