比方说,我有这样的接口和具体实施接口与泛型参数VS接口与通用方法
public interface IMyInterface<T>
{
T My();
}
public class MyConcrete : IMyInterface<string>
{
public string My()
{
return string.Empty;
}
}
所以我对strings
创建MyConcrete实现,我可以有一个int
更具体的实施。没关系。但是,让我们说,我想做同样的事情,但与一般的方法,所以我有
public interface IMyInterface2
{
T My<T>();
}
public class MyConcrete2 : IMyInterface2
{
public string My<string>()
{
throw new NotImplementedException();
}
}
所以我也有同样IMyInterface2
,但它定义了的T My<T>()
手段仿制行为。在我的具体类中,我想实现My
行为,但是对于具体的数据类型 - string
。但是C#不允许我这样做。
我的问题是为什么我不能这样做? 换句话说,如果我可以创建MyInterface<T>
的具体实现MyClass : MyInterface<string>
并停止在这一点的通用性,为什么我不能用通用方法做到这一点 - T My<T>()
?
当继承类型时,你不能*减少*能力,你只能添加它们。 –