На прошлой неделе мой собеседник спросил меня, возможно ли в C# расширить общий класс из его общего параметра. Он сказал, что это возможно на C++. То, что он хотел, действительно имеет смысл. Он хотел, чтобы общий декоратор аннотировал произвольный класс с дополнительной информацией. Что-то вроде:Декоратор с базовым базовым классом
pubic class Decorator<T> : T
{
public object AdditionalInformation {get:set;}
}
Так что теперь он может использовать этот общий декоратор везде вместо Т.
Наиболее близкая вещь, которую я мог бы прийти с был контейнер класса с исходным объектом, дополнительной информацией и неявное преобразование.
public class Decorator<T>
{
private readonly T _instance;
public Decorator(T instance)
{
_instance = instance;
}
public T Instance
{
get { return _instance; }
}
public object AdditionalInformation { get; set; }
public static implicit operator T(Decorator<T> deco)
{
return deco._instance;
}
}
Но это не то же самое, потому что неявное преобразование - это только один способ. Он не может использовать его, например, как возвращаемый тип метода, потому что дополнительная информация будет потеряна после его неявного преобразования.
У кого-нибудь есть идея?
Похожий вопрос: http://stackoverflow.com/questions/1420581/inheritance-on-a-constrained -generic-type-parameter –
Ну, вроде! Я ищу способ сделать этот общий декоратор, а не знать, почему общий базовый класс невозможен. – Mouk