string path(getenv("WINDIR"));
поместит% WINDIR% в строку std ::. Я ожидаю, что вы можете сделать то же самое с типами Qt.
Возможно, вам лучше использовать стандартные пути Qt http://doc.qt.io/qt-5/qstandardpaths.html . Возиться с% WINDIR% немного опасно.
Короче говоря, Вы не можете изменить тот интерфейс, не взламывая код, потому что C# не может вложить типы в интерфейсах. При реализации интерфейса версий VB.NET Вы указываете, что Number возвратит тип MyInterface. MyEnum:
class TestClass3 : TestInterfaces.MyInterface
{
TestInterfaces.MyInterface.MyEnum TestInterfaces.MyInterface.Number
{
get { throw new Exception("The method or operation is not implemented."); }
}
}
Однако, так как C# не может вложить типы в интерфейсах при повреждении перечислителя из интерфейса Вы будете возвращать другой тип данных: в этом случае, MyEnum.
class TestClass2 : IMyInterface
{
MyEnum IMyInterface.Number
{
get { throw new Exception("The method or operation is not implemented."); }
}
}
Думайте об этом с помощью полностью определенного имени типа. В интерфейсе VB.NET у Вас есть тип возврата
MyProject. MyInterface. MyEnum
В интерфейсе C# Вы имеете:
MyProject. MyEnum.
К сожалению, код, который реализует интерфейс VB.NET, должен был бы быть изменен для поддержки того, что тип, возвращенный MyInterface. Число изменилось.
IL поддерживает вложенные типы в интерфейсах, таким образом, это - тайна, почему C# не делает:
.class public interface abstract auto ansi MyInterface
{. экземпляр valuetype TestInterfaces свойства. Число MyInterface/MyEnum {.get экземпляр valuetype TestInterfaces. MyInterface/MyEnum TestInterfaces. MyInterface:: get_Number ()}
.class auto ansi sealed nested public MyEnum
extends [mscorlib]System.Enum
{. полевая общественность статический литеральный valuetype TestInterfaces. MyInterface/MyEnum, Возможно, = 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)
}
}
Если у Вас есть много кода в других блоках, которые используют этот интерфейс, Ваш лучший выбор состоит в том, чтобы сохранить его в отдельном блоке VB.NET и сослаться на него из Ваших проектов C#. Иначе безопасно преобразовать его, но необходимо будет изменить любой код, который использует его для возврата другого типа.
public enum MyEnum
{
Yes = 0,
No = 1,
Maybe = 2
}
public interface IMyInterface
{
MyEnum Number { get; }
}