【问题标题】:CType Operator, assing to memberC 类型运算符,分配给成员
【发布时间】:2012-01-30 22:31:38
【问题描述】:

我有这门课:

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 = "Bar" 分配中,我取消了之前分配的 X 和 Y 值。 有一种方法可以重载运算符以分配给“Value”成员,而不是创建一个新的 Foo 类?或者一种获取赋值目标的方法来复制值??

提前致谢。

【问题讨论】:

  • 否;这是完全不可能的。
  • 同样令人困惑和错误。但是,如果您确定要刻薄,则可以重载另一个运算符,例如&,然后让它执行。
  • 也许是错的,但相信我,它对我可能非常有用。
  • 我认为 assing 这个词很合适 ;)
  • 我的英语很糟糕......对不起:$

标签: .net vb.net


【解决方案1】:

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

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"

【讨论】:

    【解决方案2】:

    当然,它会覆盖它返回一个新的 Foo 实例,您指示将其放入变量 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}
    

    【讨论】:

      猜你喜欢
      • 2020-07-18
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      相关资源
      最近更新 更多