【发布时间】:2012-12-10 08:22:15
【问题描述】:
在我的应用程序中,我有使用输入和输出相互链接的组件。将要交换的数据可以是任何类型,所以我使用泛型。
public interface IInputVariable<T>
{
IOutputVariable<T> Source { get; set; }
}
public interface IOutputVariable<T>
{
T Value { get; set; }
}
在另一个类中,组件链接在一起。哪些组件被链接,是从一个文件派生的。进行链接的类不知道输入和输出交换的类型。这个类只想用下面的代码把它们连接起来:
IOutputVariable<double> output;
Type argumentType = output.GetType().GetGenericArguments()[0];
IInputVariable<argumentType> input = new BasicInputVariable<argumentType>();
input.Source = output;
此代码无法编译,因为 argumentType 不能用作通用参数。有没有正确的方法来制定这个?或者是否可以在不知道其参数类型的情况下声明一个泛型变量?
【问题讨论】:
-
将
object用于类型会有帮助吗?object是你能想象到的最通用的类型。 -
如果您的泛型参数在编译时未知,则不要使用泛型。否则,您将被困在笨拙且难以使用的类型中,而使用泛型不会带来任何好处。
-
在程序的其他部分,泛型参数是已知的,并且泛型在那里非常有用。
-
根据您的代码示例,输入和输出的类型必须相同,因为两个接口使用相同的
T值。 -
其实“IList
”并没有实现IList。
标签: c# generics types interface linked-list