У меня есть эти 3 абстрактные классы:Generic тип ошибки параметр
public abstract class DataObject {}
public abstract class BusinessObject<T> where T : DataObject {}
public abstract class UIObject<T> where T : BusinessObject<DataObject> {}
Я могу создать CustomerDataObject, который вытекает из DataObject
, а CustomerBusinessObject, который вытекает из BusinessObject<CustomerDataObject>
, но я не могу создать CustomerUIObject класс:
Тип
CustomerBusinessObject
не может быть использован в качестве параметра типаT
в общем типе или методеUIObject<T>
. Нет никакого неявного эталонного преобразования отCustomerBusinessObject
доBusinessObject<DataObject>
.
Что я делаю неправильно?
Том Ортон описывает, почему это не но правильное решение этой проблемы зависит от того, как вы хотите использовать эти типы (и их параметры типа). Если вы разместите более подробную информацию о своем прецеденте, мы сможем предложить лучший подход. –
@WillVousden Например, абстрактный класс BusinessObject предоставляет некоторые методы и события, которые совместно используются всеми конкретными бизнес-объектами. В этом случае мне нужен параметр generic type, потому что DataObject, связанный с BusinessObject, должен быть доступен, поэтому он предоставляет это свойство: public public T DataObject {get; защищенный набор; } ' –
Но как' UIObject' взаимодействует с параметрами своего типа?Похоже, что ему может понадобиться только знать тип DataObject, из которого он мог бы построить сам тип BusinessObject. –