如何在 vb 中编写此代码
[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 中自行继承结构?
请注意,在 VB 中,您没有区分大小写的代码。
所以 POINT 和 Point 是同一类型。
例如,您必须将结构重命名为 PointStruct。
您的代码基本上是正确的,但存在命名空间冲突。 该结构称为 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