如何为开放泛型类型声明变量?可能?

时间:2011-11-09 09:37:15

标签: c# open-generics

有没有办法为开放泛型类型声明一个变量?

给定:用户从工厂方法获得的通用类Logger。有没有办法让变量能够容纳任何记录器?

现在Logger只从Logger继承,因为它能够为一个实例声明一个变量而不关心那里记录的类型。

我使用MEF,在导出中我可以使用类似[Export(typeof(Logger<>))]的语法来导出泛型类型...(在导入时指定确切的类型)所以有一些支持对于开放类型(至少在typeof中)。我现在需要的是像

这样的语法

日志<>记录器{get;组; }

有可能做那样的事吗?这个特殊的语法让我“需要类型”。

1 个答案:

答案 0 :(得分:2)

如果Logger的类型参数为covariant,即如果使用out modifier声明,则可以使用Logger<object>

IEnumerable<object> = new List<string>; // this works, because IEnumerable is covariant

如果Logger的类型参数不协变,即,如果您在某处使用它作为输入参数,例如Log(T dataToLog),然后实现一个通用接口(或使用公共基类)似乎是实现目标的唯一方法。