そのようなインターフェースと具体的な実装があるとしましょう
public interface IMyInterface<T>
{
T My();
}
public class MyConcrete : IMyInterface<string>
{
public string My()
{
return string.Empty;
}
}
の MyConcrete 実装を作成するとstrings
、 の具体的な実装をもう 1 つ持つことができます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>
つまり、この時点でasの具体的な実装を作成MyClass : MyInterface<string>
してジェネリック性を停止できる場合、ジェネリック メソッドでそれを実行できないのはなぜT My<T>()
ですか?