我有以下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