Ich kann das nicht herausfinden und ich weiß nicht warum. Sorry ist diese schlechte Frage, ich habe die folgende Schnittstelle in VB
%Vor%Wenn ich die Schnittstelle in C # implementiere, erhalte ich den folgenden Fehler.
Die Einschränkungen für den Typparameter 'T' der Methode ExecuteSQL (string, bool, params System.Data.SqlClient.SqlParameter []) müssen mit den Einschränkungen für den Typparameter 'T' der Interface-Methode IFoo.ExecuteSQL (string, bool , Parameter System.Data.SqlClient.SqlParameter []) '. Erwägen Sie stattdessen die Verwendung einer expliziten Schnittstellenimplementierung
Dies ist die C # Implementierung der Schnittstelle. Nicht sicher, warum ich diesen Fehler bekomme, wenn ich Folgendes benutze:
%Vor%wo T: struct
Die VB- und C # -Compiler generieren unterschiedliche IL, wenn sie den generischen Typparameter auf Werttypen beschränken (beachten Sie die zusätzliche .ctor ([mscorlib]System.ValueType
-Einschränkung, die der C # -Compiler generiert).
VB:
%Vor%C #:
%Vor%Die verschiedenen Methodensignaturen führen zu der Nichtübereinstimmung, die von der Fehlermeldung angezeigt wird.
Ich denke, um den VB-Compiler etwas ähnliches erzeugen zu lassen, müssten Sie auch eine New
-Einschränkung hinzufügen - was vom Compiler nicht erlaubt ist. Folglich, soweit ich sehe, gibt es keine Möglichkeit, diese Schnittstelle explizit zu implementieren.
(Ich habe das mit dem C # 5-Compiler überprüft, nicht den neuen Roslyn-Compiler von VS 2015, der sich anders verhalten könnte)
Wie von @Luisgrs gezeigt, erzeugt der neue Roslyn VB-Compiler, der in VS 2015 enthalten ist, nun die generische Constraint genauso wie der C # -Compiler. Eine Lösung wäre also, den Compiler / die Visual Studio-Version zu aktualisieren.
Tags und Links c# visual-studio vb.net visual-studio-2013