Я прочитал следующие статьи SO
Все кажутся очень близкими к моему вопросу и имеют хорошие ответы, но они, похоже, не отвечают на мой вопрос, кроме как сказать, что мне нужно сделать метод нестатическим.
пример:
abstract public class baseClass
{
private static List 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 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 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. Список свойств, по-видимому, является значением, специфичным для класса, и его нельзя изменить в любой момент. Я бы подумал, что тогда это будет статично.
Является ли мой дизайн неправильным в том смысле, что я пытаюсь использовать статические методы, когда они не должны быть?
Приведенный выше пример наводит меня на мысль о необходимости наследования статических методов, однако кажется, что попытка сделать это является недостатком дизайна. Может ли кто-нибудь помочь мне понять, что не так с кодированием или структурированием классов таким образом?