【发布时间】:2011-11-09 09:37:14
【问题描述】:
有没有办法为开放的泛型类型声明一个变量?
Given:有一个通用类 Logger,用户可以从工厂方法中获取。有没有办法拥有一个可以容纳任何记录器的变量?
现在 Logger 继承自 Logger 只是为了能够为实例声明一个变量,而无需关心那里记录的是什么类型。
我使用 MEF,在导出中我可以使用类似 [Export(typeof(Logger))] 的语法来导出泛型类型...(指定导入时的确切类型),因此有一些支持开放类型(至少在 typeof 中)。我现在需要的是类似
的语法记录器记录器 { 获取;放; }
有可能做这样的事情吗?这种特殊的语法让我“需要类型”。
【问题讨论】:
-
@Lasse:我猜是因为
myObject.Log(something)会产生编译错误(即变量不是仅用于存储引用)。dynamic是一个选项,但你会失去编译时语法检查。 -
就是这样。我向日志服务询问类型 X(用于配置)的 Logger,但我对记录到特定的通用类型不感兴趣,所有的东西都是基础的一部分。我有时可能会传递记录器(子类等),他们不需要知道。我尽量避免(在这里和其他情况下)基类只是为了拥有一个。
-
那么接口就是要走的路。将您需要的功能隔离到一个界面中,然后改用它。
标签: c# open-generics