Я прихожу к C# от Java, и я не смог выяснить, как решить следующую проблему:Использовать общий базовый класс в коллекции классов, производных от общего
У меня есть общий базовый класс:
class MyBase<T> where T : SomeAncestorOfTs
{ ... }
, а затем несколько специализированных классов (A
, B
, C
...), полученные из него, как:
class A : MyBase<SomeSpecificT>
{ ... }
Сейчас где-то в моей трески e Я хотел бы создать Dictionary
различных потомков MyBase
: что-то вроде Dictionary<string,MyBase<>>
, но это не работает.
Есть ли способ в C# кроме делать Dictionary<String,Object>
?
В Java это было бы легко достигнуто путем выполнения HashMap<String,MyBase<? extends SomeAncestorOfTs>>
.
UPDATE: T
должен иметь общий базовый класс (SomeAncestorOfT
).
Я как раз собирался написать то же самое (хотя и с интерфейсом, а не с классом) +1. – petelids
Я принял ваш ответ. Но есть одна вещь, которую я бы сказал, не разрешима: если общий базовый класс содержит абстрактный метод, который возвращает 'T' (и, следовательно, не может быть в неосновном базовом базовом классе), тогда я никогда не смогу его назвать (вызов словаря) без явного литья. – NumberFour
@NumberFour Да, это правда. По крайней мере, для кода в «MyBase». Любой код вне этого класса знал бы, что 'T' в любом случае и может использовать' MyBase '. Так что это никогда не будет идеальным, но по крайней мере это не будет проблемой для остальной части кода, который использует эти классы. –
Chris