2

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

给定:用户从工厂方法中获得了一个通用类 Logger。有没有办法拥有一个可以容纳任何记录器的变量?

现在 Logger 继承自 Logger 只是为了能够为实例声明一个变量,而无需关心那里记录的是什么类型。

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

记录器<>记录器{获取;放; }

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

4

1 回答 1

2

如果 Logger 的类型参数是covariant,即如果用out修饰符声明,则可以使用Logger<object>.

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

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

于 2011-11-09T09:42:17.303 回答