Es gibt eine Basisklasse mit einer generischen Methode, und ich bin mir sicher, dass ich in meiner abgeleiteten Klasse eine Zeichenkette zurückgeben werde. Das ist mein Code:
%Vor%Aber dieser Code kompiliert nicht. Kann jemand den Fehler erkennen? Ich bin mir sicher, dass ich in meiner Erweiterten Klasse nur String zurückgeben möchte. Wie löse ich das?
Sie können eine generische Methode mit einer konkreten Implementierung nicht überschreiben; So funktionieren Generika nicht. Die Klasse Extended
muss z. B. Aufrufe von GetSomething<int>()
verarbeiten können.
Mit anderen Worten, die Signatur für eine überschreibende Methode muss identisch mit der Methode sein, die überschrieben wird. Indem Sie eine konkrete generische Implementierung der Methode angeben, ändern Sie ihre Signatur.
Erwägen Sie, diesen Ansatz zu verwenden:
%Vor%Beachten Sie, dass das JIT die Bedingung beim Kompilieren einer bestimmten Instantiierung dieser Methode optimieren sollte. (Wenn nicht, dann ist es kein sehr guter JIT!)
(Die Syntax für Ihre Überschreibung ist technisch korrekt, scheitert aber auch an anderen Gründen. Beispielsweise können Sie das Schlüsselwort string
nicht als generischen Parameternamen verwenden. Und wenn Sie könnten, würde Ihr Code immer noch t tun, was Sie wollen, noch würde es kompilieren, da der Compiler keine Methode mit dieser Signatur auf einem Supertyp finden könnte.)