Может ли абстрактный универсальный родительский класс автоматически получить дочерний (расширяемый) тип? - PullRequest
2 голосов
/ 17 октября 2011

В моем проекте на c # у меня есть два абстрактных общих родительских класса, которые затем имеют несколько дочерних классов, которые наследуют их. Проблема в том, что я передаю дочерний тип родительскому родовому, и это делает для некоторых глупо выглядящих определений классов и методов.

Есть ли способ в родительских классах Generic получить тип класса, наследующего их? Поэтому вместо того, чтобы передавать тип в DTOBase, объявите, что это будет тип первого дочернего элемента DTOBase.

Определения родительского класса

public abstract class DTOBase<T> : INotifyPropertyChanged, IMergeable<T>

public abstract class ModelBase<T,U> : INotifyPropertyChanged, ITrackable, IMergeable<U> 
    where T : DTOBase<T>
    where U : ModelBase<T,U>

Пример дочерних классов

 public class MenuGroup : DTOBase<MenuGroup>

public class MenuGroup : ModelBase<DTOs.MenuGroup, MenuGroup>

1 Ответ

3 голосов
/ 17 октября 2011

Нет, такого рода вещи достаточно распространены, когда у вас есть типовые отношения, которые не могут быть легко выражены любым другим способом. У меня есть что-то подобное в моем порте буфер протокола:

public interface IMessage<TMessage, TBuilder> 
    : IMessage<TMessage>, IMessageLite<TMessage, TBuilder>
    where TMessage : IMessage<TMessage, TBuilder>
    where TBuilder : IBuilder<TMessage, TBuilder>

Это раздражает и уродливо, но это делает работу. Извините, что у вас нет хороших новостей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...