Я только начинаю осваивать дженерики и использую их для рефакторинга довольно сложного раздела моего кода (я только недавно использовал c #, но довольно опытен в других языках).
У меня есть структура наследования, где мои классы расширяют базовый класс. В базовом классе я реализовал большую часть функциональности. Но я хочу иметь возможность связать эти классы детей с экземплярами своих братьев и сестер.
Вот упрощение некоторых соответствующих кодов:
class ParentClass<T>
where T : ParentClass<T>, new()
{
public static T Create()
{
return new T();
}
private object joinedItem;
public void Join<TJoinee>(TJoinee item)
where TJoinee : ParentClass<TJoinee>, new()
{
joinedItem = item;
}
}
class ChildOne : ParentClass<ChildOne>
{
}
class ChildTwo : ParentClass<ChildTwo>
{
}
С этим кодом я могу сделать что-то вроде:
var a = ChildOne.Create();
a.Join(new ChildTwo());
Проблема в том, что мне нужно было набрать joinedItem
как объект, когда я действительно хочу напечатать его как ParentClass<Something>
. Можно ли прописать более конкретный тип для joinedItem
? Или я просто ужасно ругаю язык и должен придерживаться совершенно другого подхода?