如何从 c# 转换 vb 中的结构

本文关键字:结构 vb 转换 | 更新日期: 2024-10-31 05:52:34

如何在 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 中自行继承结构?

如何从 c# 转换 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