Lassen Sie uns sagen, dass ich eine solche Schnittstelle und konkrete Umsetzung habenSchnittstelle mit generischer Parameter vs Interface mit generischen Methoden
public interface IMyInterface<T>
{
T My();
}
public class MyConcrete : IMyInterface<string>
{
public string My()
{
return string.Empty;
}
}
Also für I strings
MyConcrete Implementierung schaffen, kann ich für int
eine konkretere Umsetzung haben. Und das ist in Ordnung. Aber lassen Sie uns sagen, dass ich das gleiche tun wollen, aber mit generischen Methoden, so habe ich
public interface IMyInterface2
{
T My<T>();
}
public class MyConcrete2 : IMyInterface2
{
public string My<string>()
{
throw new NotImplementedException();
}
}
So habe ich das gleiche IMyInterface2
, die aber mittels T My<T>()
allgemeine Verhalten definiert. In meiner konkreten Klasse möchte ich My
Verhalten implementieren, aber für konkreten Datentyp - string
. Aber C# erlaubt mir das nicht.
Meine Frage ist, warum ich das nicht tun kann? Mit anderen Worten, wenn ich konkrete Implementierung von MyInterface<T>
als MyClass : MyInterface<string>
erstellen und an diesem Punkt genericness stoppen kann, warum kann ich das mit generischer Methode nicht tun - ?
Sie können * Fähigkeiten nicht reduzieren, wenn Sie Typen erben, Sie können nur zu ihnen hinzufügen. –