C # -Schnittstelle und generische Kombination. Möchten Sie T anstelle seiner Basisschnittstelle zurückgeben

8

Ich bin auf meine eigenen Zehen getreten mit dem, was ich für einen sehr einfachen Code hielt. Code spricht besser als Worte, also hier ist es.

%Vor%

Der Compiler erlaubt mir das nicht, weil IResponse verlangt, dass Result IResult ist, aber ich möchte Generics in der implementierenden Klasse nutzen und das Ergebnis stark nach T eingeben. Ist das nicht möglich oder habe ich es verpasst etwas Triviales?

    
Arkiliknam 30.12.2011, 10:28
quelle

5 Antworten

11

Sie müssen auch IResponse generic machen:

%Vor%

Wenn Sie die IResponse -Schnittstelle ohne den generischen Parameter intakt beibehalten möchten, können Sie noch schicker werden. Das Folgende hat die zwei Schnittstellen, wobei die Klasse die Schnittstelle auch ohne den generischen Parameter transparent implementiert:

%Vor%

Und wenn Sie näher bei Ihrer ursprünglichen Implementierung bleiben möchten, können Sie IResponse<T> entfernen und Folgendes erhalten:

%Vor%     
Pieter van Ginkel 30.12.2011, 10:32
quelle
4

Wenn Sie "nur" Generika nutzen möchten, brauchen Sie IResponse nicht.

Die Schnittstelle löst ein anderes Problem, das mit Ihrem Wunsch nicht vereinbar ist. Bedenken Sie

%Vor%

Entweder make IResponse generic oder es komplett entfernen.

    
Henk Holterman 30.12.2011 10:33
quelle
2

Versuchen Sie es

%Vor%     
Peter Rennie 30.12.2011 10:38
quelle
1

Sie sollten die IR-Antwort generisch machen und den Typ des Ergebnisses in IResponse ändern, wenn der Typ-Parameter an diese Schnittstelle übergeben wird.

%Vor%     
Maheep 30.12.2011 10:33
quelle
1
%Vor%     
Eugen Rieck 30.12.2011 10:34
quelle

Tags und Links