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

本文关键字:变量 声明 泛型类型 | 更新日期: 2023-09-27 18:14:09

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

给定:有一个通用类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),那么实现一个公共接口(或使用一个公共基类)似乎是实现你的目标的唯一方法。