我有以下VB.net接口,我需要移植到C#。 C#不允许在接口中枚举。如何在不更改使用此接口的代码的情况下移植此代码?如何将VB.net接口与枚举转换为C#
Public Interface MyInterface
Enum MyEnum
Yes = 0
No = 1
Maybe = 2
End Enum
ReadOnly Property Number() As MyEnum
End Interface
我有以下VB.net接口,我需要移植到C#。 C#不允许在接口中枚举。如何在不更改使用此接口的代码的情况下移植此代码?如何将VB.net接口与枚举转换为C#
Public Interface MyInterface
Enum MyEnum
Yes = 0
No = 1
Maybe = 2
End Enum
ReadOnly Property Number() As MyEnum
End Interface
总之,你不能改变的接口不破坏代码,因为C#不能嵌套类型的接口。当你实现了VB.NET版本的界面,你指定号码会返回一个类型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.Number返回的类型已经改变的事实。
IL支持嵌套类型内部接口,所以这是一个谜,为什么C#不:
.class public interface abstract auto ansi MyInterface
{ .property例如值类型TestInterfaces.MyInterface/MyEnum数 { 不用彷徨实例值类型TestInterfaces.MyInterface/MyEnum TestInterfaces.MyInterface :: get_Number() }
.class auto ansi sealed nested public MyEnum
extends [mscorlib]System.Enum
{ 点域公共静态字面VA luetype 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; }
}
这打破了使用界面的代码。如果可能,我想避免这种情况。 – user25825 2008-10-08 18:41:16