Kurz gesagt, Sie können diese Schnittstelle nicht ändern, ohne Code zu unterbrechen, weil C # Typen in Schnittstellen nicht verschachteln kann. Wenn Sie die Schnittstelle der VB.NET-Versionen implementieren, geben Sie an, dass Number einen Typ von MyInterface.MyEnum zurückgibt:
%Vor%Da C # jedoch keine Typen in Schnittstellen verschachteln kann, geben Sie einen anderen Datentyp zurück, wenn Sie den Enumerator aus der Schnittstelle herausbrechen: In diesem Fall MyEnum.
%Vor%Denken Sie darüber nach, indem Sie den vollständig qualifizierten Typnamen verwenden. In der VB.NET-Schnittstelle haben Sie einen Rückgabetyp von
MyProject.MyInterface.MyEnum
In der C # -Schnittstelle haben Sie:
MyProject.MyEnum.
Leider müsste Code, der die VB.NET-Schnittstelle implementiert, geändert werden, um die Tatsache zu unterstützen, dass sich der von MyInterface.Number zurückgegebene Typ geändert hat.
IL unterstützt Verschachtelungstypen innerhalb von Schnittstellen. Daher ist es ein Rätsel, warum C # nicht funktioniert:
%Vor%{ .property-Instanz Werttyp TestInterfaces.MyInterface / MyEnum-Nummer { .get-Instanz Werttyp TestInterfaces.MyInterface / MyEnum TestInterfaces.MyInterface :: get_Number () }
%Vor%{ .field public static literal Werttyp TestInterfaces.MyInterface / MyEnum Maybe = int32 (2)
%Vor%}
Wenn Sie in anderen Assemblys, die diese Schnittstelle verwenden, viel Code haben, ist es am besten, wenn Sie ihn in einer separaten VB.NET-Assembly aufbewahren und auf Ihre C # -Projekte verweisen. Andernfalls ist es sicher, es zu konvertieren, aber Sie müssen jeden Code ändern, der es verwendet, um den anderen Typ zurückzugeben.