假设我有这样的接口和具体实现:
public interface IMyInterface<T>
{
T My();
}
public class MyConcrete : IMyInterface<string>
{
public string My()
{
return string.Empty;
}
}
我创建了一个strings
的实现,这样我可以再为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>()
进行同样的操作?