2012-01-30 50 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}