2013-12-17 22 views
2

如何寫VB這個代碼如何將vb中的struct從c#轉換成?

[StructLayout(LayoutKind.Sequential)] 
    public struct POINT 
    { 
     public int X; 
     public int Y; 

     public static implicit operator Point(POINT point) 
     { 
      return new Point(point.X, point.Y); 
     } 
    } 

我已經嘗試這一點,但它不工作

<StructLayout(LayoutKind.Sequential)> _ 
Public Structure POINT 
    Public X As Integer 
    Public Y As Integer 

    Public Shared Widening Operator CType(point As POINT) As Point 
     Return New Point(point.X, point.Y) 
    End Operator 
End Structure 

我得到這個兩個錯誤:

Error 1 Conversion operators cannot convert from a type to the same type. 
Error 2 Type 'MousePosition.Form1.POINT' has no constructors. 

是否有可能繼承結構在它自我在VB?

+0

VB是不區分大小寫一次,你必須給參數和類型或者不同的名稱或不同的命名空間 –

回答

4

請注意,在VB中你沒有區分大小寫的代碼。

所以POINT和Point是相同的類型。

你必須重命名你的結構爲PointStruct爲例。

2

你的代碼基本上是正確的,但是你有一個命名空間衝突。該結構稱爲POINT,但在System.Drawing命名空間中已經有一個同名的類型。在C#中,類型名稱區分大小寫,所以不存在衝突,但在VB.NET中,類型不區分大小寫,所以它不知道你的意思。最容易做的事情是將類重命名爲別的東西,像這樣:

<StructLayout(LayoutKind.Sequential)> 
Public Structure ApiPoint 
    Public X As Integer 
    Public Y As Integer 

    Public Shared Widening Operator CType(point As ApiPoint) As Point 
     Return New Point(point.X, point.Y) 
    End Operator 
End Structure 

但是,你可以把它與該名工作,如果你真的想。你只需要在每次需要在兩者之間進行區分時明確指定完整的命名空間,例如:

<StructLayout(LayoutKind.Sequential)> 
Public Structure POINT 
    Public X As Integer 
    Public Y As Integer 

    Public Shared Widening Operator CType(point As POINT) As System.Drawing.Point 
     Return New System.Drawing.Point(point.X, point.Y) 
    End Operator 
End Structure