【发布时间】:2018-04-25 03:48:25
【问题描述】:
上周我的一位同事问我是否可以在 C# 中从其泛型参数扩展泛型类。他说这在 C++ 中是可能的。 他想要的实际上是有道理的。他想要一个通用装饰器来用附加信息注释任意类。比如:
public class Decorator<T> : T
{
public object AdditionalInformation {get:set;}
}
这样他现在可以在任何地方使用这个通用装饰器而不是 T。
我能想到的最相似的东西是一个包含原始对象、附加信息和隐式转换的容器类。
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;
}
}
但这不一样,因为隐式转换只是一种方式。例如,他不能将其用作方法的返回类型,因为在隐式转换后附加信息会丢失。
有人有更好的主意吗?
【问题讨论】:
-
嗯,有点!我正在寻找一种方法来制作这个泛型装饰器,而不是想知道为什么泛型基类是不可能的。