VB6中能否将Coord结构体作为类属性类型?编译报错求助
VB.NET中自定义结构体作为类属性时出现重载解析失败错误的解决方法
嘿,我来帮你搞定这个问题!你遇到的System.MissingMemberException错误主要源自两个容易忽略的问题:命名冲突和属性赋值的语法错误,咱们逐个解决:
问题1:属性与结构体同名导致的歧义
你把类的属性和自定义结构体都命名为Coord,这会让编译器彻底懵圈——当你在属性声明里写As Coord时,它分不清你指的是那个自定义结构体,还是正在声明的这个属性本身,直接导致重载解析失败。
问题2:属性赋值用了方法调用的语法
你赋值时写的Current.Coord(NewCoord)是方法调用的写法,但你定义的是属性,不是方法,属性赋值必须使用赋值运算符=。
修改后的代码示例
第一步:调整命名避免冲突
把结构体或者属性的名字改一个,让它们区分开,比如把结构体改成Coordinate,属性改成Position:
' 先定义自定义结构体(换个名字) Public Structure Coordinate Public x As Integer Public y As Integer End Structure ' 类中的私有字段和属性 Private coordinate As Coordinate Public Property Position() As Coordinate Get Return coordinate End Get Set(ByVal Value As Coordinate) ' 结构体是值类型,直接赋值更简洁,和你手动复制x/y效果一致 coordinate = Value End Set End Property
第二步:用正确的语法赋值
' 假设NewCoord是Coordinate类型的实例 Current.Position = NewCoord
额外小提示
如果你特别想保留结构体名为Coord,也可以在属性声明时明确指定类型的范围(比如全局命名空间)来消除歧义,写法如下:
Public Property Position() As Global.Coord Get Return coordinate End Get Set(ByVal Value As Global.Coord) coordinate = Value End Set End Property
不过还是更推荐避免同名命名,让代码可读性更高~
内容的提问来源于stack exchange,提问作者adep7
相关产品推荐
相关产品推荐

