Die VB-Schnittstelle konnte in C # aufgrund von Einschränkungen nicht implementiert werden

8

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:

  

wo T: struct

%Vor%

    
Son_of_Sam 15.12.2015, 15:15
quelle

1 Antwort

7

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)

Aktualisieren

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.

    
Dirk Vollmar 15.12.2015, 16:02
quelle