In C# möchte ich einige spezialisierte Generika, die nur verwendet werden, um einen bestimmten Typ von einem anderen generischen zurückzugeben. Der spezielle generische Zweck besteht darin, nur einige exakte Typen zu erzwingen, die zurückgegeben werden (wie double, double [], byte, byte []). Wahrscheinlich wird am besten durch ein Beispiel zu erläuternC# Generic mit begrenzten Rückgabetypen
var x = new MyGeneric<MyInterfaceDouble>();
double returnVal = x.getVal();
var x = new MyGeneric<MyInterfaceMyClass>();
MyClass returnVal = x.getVal();
So habe ich mehr Möglichkeiten versucht, dies zu erreichen, aber nicht in der Lage, dies zu tun. Die neueste Iteration:
public interface IMyInterface
{}
public interface IMyInterface<T, U> :IMyInterface
{
U getValue();
}
public class MyInterfaceDouble: IMyInterface<MyInterfaceDouble, double>, IMyInterface
{
public double getValue()
{
return 8.355;
}
}
public class MyGeneric<T> where T : IMyInterface
{}
Aber ich kann nicht den get zugreifen Wert
var x = new MyGeneric<MyInterfaceDouble>();
double returnVal = x.getVal(); // not available
Wie kann dies gemacht werden?
Methode nicht verfügbar was meinst du, es existiert nicht? Oder geht es um die Schutzstufe? In Ihrer Klassendefinition heißt Ihre Methode: getValue, und Sie rufen getVal auf. das gibt es nicht – Ferus7
@ Ferus7 Ich glaube, der Grund ist, dass MyGeneric nicht IMyInterface generisch erbt, so dass es kein Mitglied hat. Ich habe es auch versucht, indem ich die nicht generische IMyInterfece geerbt habe, aber da es kein Mitglied hat, wird es auch nicht verfügbar sein. –
codiac
'MyGeneric' erbt nicht 'T', noch implementiert es keine Methoden, also nein, Sie werden 'getVal' oder' getValue' für dieses Objekt nicht finden. Bitte erläutern Sie, was Sie hier erreichen möchten, da die Sprache nicht das unterstützt, was Sie hier verlangen. –