У меня проблемы с этим, так как у меня тоже есть трудности с правильной формулировкой. Это усложняет поиск в Google. Я постараюсь объяснить как можно более четко. Я упростил код, чтобы было понятнее, что мой вопрос
У меня есть абстрактный класс, который имеет методы и свойства, которые используются всеми предложениями, которые имеют этот базовый класс:
public abstract class TheBaseClass{
//some properties here
public enum MyEnum{} // this one every class has. It is pretty much empty here. Not sure if this is best practice.
//some methods here
}
Тогда есть ряд классов, основанных на этом:
public SpecializedClass : TheBaseClass{
//some more properties here
public new enum MyEnum{} //every single class has a different enum
//some more methods here
}
Теперь, где-то еще в коде, у меня есть метод
public void MyMethod(TheBaseClass baseclassobject){
//do stuff
var usedforsomething = ((TheBaseClass.MyEnum)i).ToString() //i being an int. This is used to name something in a plot.
//do more stuff
}
Причина использования TheBaseClass в качестве параметра для метода заключается в том, что раньше у меня был очень длинный код, который делал то, что делал mymethod для каждого класса, производного от TheBaseClass. Не хорошо иметь дублирующийся код, поэтому я сделал этот метод вместо этого и хотел вызвать его с параметром SpecializedClass (и многими другими классами также). Проблема в том, что при вызове TheBaseClass.MyEnum я, естественно, получаю перечисление для BaseClass, а не от SpecializedClass. Я экспериментировал с тем, как получить правильное перечисление в методе, независимо от того, какой базовый класс я ему даю, но, похоже, не могу найти решение.
Как я могу получить перечисление любого класса baseclassobject? Я пробовал разные вещи, но, похоже, не работает. Проблема, которую я считаю, состоит в том, что enum не является свойством или методом, который я могу вызвать из объекта, а скорее должен вызвать ClassName.MyEnum, которого в методе нет className.
Решением может быть создание метода для каждого типа класса с этим конкретным типом класса в качестве параметра, но это выглядит как много повторяющегося кода.
Например, если у меня есть 50 различных производных классов, таких как SpecializedClass