是否有办法为开放泛型类型声明一个变量?
给定:有一个通用类Logger,用户从一个工厂方法中获得。是否有一种方法可以有一个变量,可以容纳任何记录器?
现在Logger继承了Logger ONLY,因为它可以为一个实例声明一个变量,而不用关心记录的是什么类型。
我使用MEF,在导出中我可以使用像[Export(typeof(Logger<>))]这样的语法来导出泛型类型…(在导入时指定确切的类型),因此有一些对开放类型的支持(至少在typeof中)。我现在需要的是像
这样的语法Logger<> Logger {get;设置;}
有可能那样做吗?这种特殊的语法让我得到"Type needed"
如果Logger的类型参数是协变的,也就是说,如果它是用out
修饰符声明的,那么你可以只使用Logger<object>
。
IEnumerable<object> = new List<string>; // this works, because IEnumerable is covariant
如果Logger的类型参数不是协变的,也就是说,如果你使用它作为输入参数某处,例如Log(T dataToLog)
,那么实现一个公共接口(或使用一个公共基类)似乎是实现你的目标的唯一方法。