"A <T>(IList<T> x) where T : I" 和 "A(IList<I> x)" 的区别?
Difference between "A <T>(IList<T> x) where T : I" and "A(IList<I> x)"?
有什么区别
public void MyMethod<T>(IList<T> myParameter) where T : IMyInterface
和
public void MyMethod(IList<IMyInterface> myParameter)
?
IList<T>
不是 covariant,因此您无法将 IList<SomeObjectThatImplementsIMyInterface>
传递给第二种方法。
假设你可以,并且你有:
class MyClass1 : IMyInterface {}
class MyClass2 : IMyInterface {}
MyMethod
的实施是:
MyMethod(IList<IMyInterface> myParameter)
{
// perfectly valid since myParameter can hold
// any type that implements IMyInterface
myParameter.Add(new MyClass2());
}
如果您尝试拨打
MyMethod(new List<MyClass1>()) ;
它会在运行时失败,因为列表被定义为包含 MyClass1
个对象并且不能包含 MyClass2
个对象。
有什么区别
public void MyMethod<T>(IList<T> myParameter) where T : IMyInterface
和
public void MyMethod(IList<IMyInterface> myParameter)
?
IList<T>
不是 covariant,因此您无法将 IList<SomeObjectThatImplementsIMyInterface>
传递给第二种方法。
假设你可以,并且你有:
class MyClass1 : IMyInterface {}
class MyClass2 : IMyInterface {}
MyMethod
的实施是:
MyMethod(IList<IMyInterface> myParameter)
{
// perfectly valid since myParameter can hold
// any type that implements IMyInterface
myParameter.Add(new MyClass2());
}
如果您尝试拨打
MyMethod(new List<MyClass1>()) ;
它会在运行时失败,因为列表被定义为包含 MyClass1
个对象并且不能包含 MyClass2
个对象。