В последнее время я много занимаюсь абстрактными классами, которые используют дженерики. Это все хорошо и хорошо, потому что я извлекаю много полезного из этих классов, но теперь это делает довольно уродливый код. Например:
abstract class ClassBase<T>
{
T Property { get; set; }
}
class MyClass : ClassBase<string>
{
OtherClass PropertyDetail { get; set; }
}
Эта реализация не такая уж и безумная, за исключением случаев, когда я хочу сослаться на абстрактный класс из вспомогательного класса, а затем мне нужно составить список обобщенных элементов просто для ссылки на реализованный класс, как показано ниже. *
class Helper
{
void HelpMe<C, T>(object Value)
where C : ClassBase<T>, new()
{
DoWork();
}
}
Это просто простой пример, потому что у меня есть некоторые вызовы методов, в которых список предложений where составляет 5 или 6 строк для обработки всех общих данных. То, что я действительно хотел бы сделать, это
class Helper
{
void HelpMe<C>(object Value)
where C : ClassBase, new()
{
DoWork();
}
}
но он явно не скомпилируется. Я хочу сослаться на ClassBase без необходимости передавать ему целый массив универсальных классов, чтобы заставить функцию работать, но я не хочу ссылаться на классы более высокого уровня, потому что их существует дюжина. Я жертва собственной хитрости или есть путь, который я еще не рассмотрел?