Есть ли способ установить экземпляр объекта в текущий экземпляр объекта в своем собственном классе? - PullRequest
1 голос
/ 27 августа 2009

Я не совсем уверен, как задать этот вопрос .. надеюсь, мое объяснение прояснит:

У меня в классе есть открытый метод, скажем 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

Ответы [ 4 ]

3 голосов
/ 27 августа 2009

Нет, но вы можете сделать, чтобы ваш объект вызвал событие, которое прослушивает ссылающийся (родительский) объект, и соответствующим образом заменил объект.

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)
1 голос
/ 27 августа 2009

Просто верните объект, который вы хотите использовать, и установите ссылку на сайте вызова.

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

myWidget = myWidget.Update()
0 голосов
/ 27 августа 2009

Что вы пытаетесь сделать на более высоком уровне?

Я имею в виду, почему вы пытаетесь "изменить" текущий объект на один из объектов в этом списке?

Если вы хотите изменить ссылки других людей на ваш текущий объект, чтобы они теперь указывали на другой объект, тогда нет, вы не можете этого сделать.

Кроме того, кажется, что вы берете объект, который уже является "мной", и пытаетесь присвоить его "Я". Какова цель этого?

0 голосов
/ 27 августа 2009

Me ссылается на экземпляр класса, в котором выполняется код, и его нельзя изменить. (это в c #) Его нельзя использовать как переменную.

...