【问题标题】:Is there any way to set an instance of an object to the current instantiated object within its own class?有没有办法在自己的类中将对象的实例设置为当前实例化的对象?
【发布时间】:2010-11-23 04:34:21
【问题描述】:

我真的不确定如何问这个问题。希望我的解释能澄清:

我在一个类中有一个公共方法,比如Widget,它接受一个小部件列表并对它们进行更改。但是,有时,调用该方法的 Widget 在该列表中。有没有办法将当前对象设置为列表中的一项?

例如,这是我想要做的:

Public Class Widget()
    '...other stuff'
    Public Sub Update()
        'do some stuff...'
        For Each w As Widget In List(Of Widget)
           'update widgets'
           If w.ID = ID Then
              Me = w '<----- here is what I am trying to do, but it wont let me'
           End If
        Next
    End Sub
End Class

【问题讨论】:

  • 使其成为静态方法?
  • 很遗憾,无法将其设为静态(共享)。它是遗传的。

标签: asp.net object variable-assignment


【解决方案1】:

只需返回您要使用的对象,并在调用站点设置引用即可。

Public Class Widget()
    '...other stuff'
    Public Function Update() As Widget
        'do some stuff...'
        return SelectedWidget
    End Sub
End Class

myWidget = myWidget.Update()

【讨论】:

    【解决方案2】:

    不,但你可以做的是让你的对象触发一个事件,引用(父)对象监听,并适当地替换该对象。

    Public Class Widget
        Public Event Replace As ReplaceReferenceEventHandler
    
        Public Sub Update()
            'do stuff
            For Each w As Widget In List(Of Widget)
               'update widgets'
               If w.ID = ID Then
                  Replace(Me, w)
               End If
            Next
        End Sub
    End Class
    
    Public Delegate Sub ReplaceReferenceEventHandler(ByVal sender As Object, ByVal replaceWith As Object)
    

    【讨论】:

    • 有趣的想法! (前提是他实际上正在尝试这样做)
    【解决方案3】:

    你想在更高的层次上做什么?

    我的意思是,您为什么要尝试将当前对象“更改”为该列表中的对象之一?

    如果您想更改其他人对您当前对象的引用,以便他们现在指向另一个对象,那么不,您不能这样做。

    此外,您似乎已经在使用“我”这个对象,并试图将其分配给“我”。 这样做的目的是什么?

    【讨论】:

    • 在更高级别上,在页面上(与单个表单相关)我将所有相关表单更新为总体顺序,因为一个表单的操作可能会影响其他表单,但我想选择与该页面相关的表单并将其重新绑定到表单。
    【解决方案4】:

    Me 引用了代码在其中运行且无法更改的类实例。 (这在 C# 中) 它不能像变量一样使用。

    【讨论】:

    • 当前实例是c#中的this。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多