2012-01-30 51 views
0

我有这个类:CTYPE操作,assing到会员

Public Class Foo 

    Public X As Integer 
    Public Y As Integer 
    Public Value As String 

    Public Shared Widening Operator CType(v As String) As Foo 
     Dim fobj As New Foo 
     fobj.Value = v 
     Return fobj 
    End Operator 

End Class 

而这种代码:

Public Sub Test() 
    Dim f As New Foo 
    f.X = 3 
    f.Y = 10 
    f = "Bar" 
End Sub 

在F = “酒吧” 任务,我失去了以前的X和先前指定的Y值。 有一种方法可以将运算符重载到“Value”成员而不是创建新的Foo类?或者一种获取赋值目标的方法来复制值

在此先感谢。

+1

否;这完全不可能。 – SLaks 2012-01-30 22:33:52

+1

也混淆和错误。但是,如果你确定自己是卑鄙的,你可以重载另一个操作符,比如'&',并让它做到这一点。 – GSerg 2012-01-30 22:36:47

+0

也许是错误的,但相信我,它可能对我非常有用。 – 2012-01-30 22:42:10

回答

2

可能是最接近你可以得到:

Public Shared Operator &(ByVal x As Foo, ByVal y As String) As Foo 
    x.Value = y 
    Return x 
End Operator 
f.X = 3 
f.Y = 10 
f &= "Bar" 
+0

+1巧妙的把戏 – SLaks 2012-01-31 00:06:57

0

当然它要覆盖其回报您需要指示摆在变量f,其中确实包含美孚的新实例以前的Foo。

我认为最好定义一个构造函数(例如NEW)。

Public Class Foo 
Public Property Value() As String 
Public Property X() As Integer 
Public Property Y() As Integer 

Public Sub New() 
End Sub 

Public Sub New(ByVal Value As String, x As Integer, y As Integer) 
    Value = Value 
    x = x 
    y = y 
End Sub 
End Class 

然后,你可以简单地写

Dim f0 = New Foo("ABC", 1, 2) 
Dim f1 = New Foo() With {.Value = "ABC", .X = 1, .Y = 2}