【发布时间】:2011-09-24 10:49:54
【问题描述】:
假设我有这个接口:
public interface IFoo
{
string Text {get;}
}
以及实现它的这个类:
public class Bar : IFoo
{
public string Text
{
get {return "Hello World!";}
}
}
我有一个以List<IFoo> 为参数的函数。当我尝试将 List<Bar> 传递给它时,我得到了这个编译器错误:
Argument 1: cannot convert from System.Collections.Generic.List<Bar>
to System.Collections.Generic.List<IFoo>
这是为什么?看起来这应该是出于同样的原因,就好像我直接传递了一个继承自 Bar 的类的列表一样。
【问题讨论】:
-
尝试使用泛型。然后,您的函数可以将 List
作为参数。查看msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx 向下滚动大约一半到通用方法 -
我需要传递的对象来实现这个接口。如果我使用的是较新版本的 .NET,我会很乐意使用泛型并使用
Func参数从我传递的对象中获取我需要的信息。 -
根据文章我链接的泛型应该在 .net 2.0 中工作
-
你可以使用
Frob(List<T> list) where T : IFoo。
标签: c# .net oop interface .net-2.0