有没有办法为开放泛型类型声明一个变量?
给定:用户从工厂方法获得的通用类Logger。有没有办法让变量能够容纳任何记录器?
现在Logger只从Logger继承,因为它能够为一个实例声明一个变量而不关心那里记录的类型。
我使用MEF,在导出中我可以使用类似[Export(typeof(Logger<>))]的语法来导出泛型类型...(在导入时指定确切的类型)所以有一些支持对于开放类型(至少在typeof中)。我现在需要的是像
这样的语法日志<>记录器{get;组; }
有可能做那样的事吗?这个特殊的语法让我“需要类型”。
答案 0 :(得分:2)
如果Logger的类型参数为covariant,即如果使用out
modifier声明,则可以使用Logger<object>
。
IEnumerable<object> = new List<string>; // this works, because IEnumerable is covariant
如果Logger的类型参数不协变,即,如果您在某处使用它作为输入参数,例如Log(T dataToLog)
,然后实现一个通用接口(或使用公共基类)似乎是实现目标的唯一方法。