En bref, vous ne pouvez pas changer cette interface sans casser le code, parce que C# ne peut pas les types de nids dans les interfaces. Lorsque vous implémentez l'interface des versions VB.NET, vous indiquez ce numéro renverra un type de MyInterface.MyEnum:
class TestClass3 : TestInterfaces.MyInterface
{
TestInterfaces.MyInterface.MyEnum TestInterfaces.MyInterface.Number
{
get { throw new Exception("The method or operation is not implemented."); }
}
}
Cependant, étant donné que C# ne peut pas les types de imbriquer interfaces, si vous briser le recenseur sur l'interface, vous retournerez un type de données différent: dans ce cas, MyEnum.
class TestClass2 : IMyInterface
{
MyEnum IMyInterface.Number
{
get { throw new Exception("The method or operation is not implemented."); }
}
}
Pensez-y en utilisant le nom de type complet. Dans l'interface VB.NET, vous avez un type de retour de
MyProject.MyInterface.MyEnum
Dans l'interface C#, vous avez:
MyProject.MyEnum.
Malheureusement, le code qui implémente l'interface VB.NET doit être modifié pour prendre en charge le fait que le type renvoyé par MyInterface.Number a changé.
IL supporte les types de nidification à l'intérieur des interfaces, il est donc un mystère pourquoi C# ne pas:
.class public interface abstract auto ansi MyInterface
{ .property exemple valuetype TestInterfaces.MyInterface/MyEnum Numéro { exemple .get valuetype TestInterfaces.MyInterface/MyEnum TestInterfaces.MyInterface :: get_Number() }
.class auto ansi sealed nested public MyEnum
extends [mscorlib]System.Enum
{ .field va littéralement public static luetype TestInterfaces.MyInterface/MyEnum = Peut-être int32 (2)
.field public static literal valuetype TestInterfaces.MyInterface/MyEnum No = int32(1)
.field public specialname rtspecialname int32 value__
.field public static literal valuetype TestInterfaces.MyInterface/MyEnum Yes = int32(0)
}
}
Si vous avez beaucoup de code dans d'autres ensembles qui utilisent cette interface, le mieux est de le garder dans une séparée VB.NET assembly, et référence à partir de vos projets C#. Sinon, il est sûr de le convertir, mais vous devrez changer le code qui l'utilise pour retourner le type différent.
Cela casse le code qui utilise l'interface. Je voudrais éviter cela si possible. – user25825