Est-il possible de définir une instance d'un objet à l'objet instancié en cours au sein de sa propre classe?

voix
1

Je ne sais pas vraiment comment poser cette question .. je espère que mon explication précisera:

J'ai une méthode publique dans une classe, par exemple Widgetqui prend une liste de widgets et apporte des modifications à leur disposition . Cependant, parfois, le Widget appelant la méthode est dans cette liste. Est - il possible de définir l'objet en cours comme l' un des éléments de la liste?

Par exemple, voici ce que je suis en train de le faire:

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
Créé 26/08/2009 à 22:56
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
0

Me fait référence à l'instance de la classe dans laquelle le code court et ne peut être modifiée. (Ceci en c #) Il ne peut pas être utilisé comme une variable.

Créé 26/08/2009 à 23:01
source utilisateur

voix
0

Qu'est-ce que vous essayez de faire, à un niveau supérieur?

Je veux dire, pourquoi essayez-vous de « changement » de l'objet courant dans l'un des objets de cette liste?

Si vous voulez changer les références que les autres ont à votre objet actuel, de sorte qu'ils pointent maintenant à un autre objet, alors non, vous ne pouvez pas faire cela.

Il semble aussi que vous prenez l'objet qui est « moi » déjà, et d'essayer de l'assigner à « Me ». Quel est le but?

Créé 26/08/2009 à 23:02
source utilisateur

voix
3

Non, mais ce que vous pouvez faire est d' avoir votre objet déclencher un événement qui le référencement (parent) objet écoute, et remplace de façon appropriée l'objet.

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)
Créé 26/08/2009 à 23:03
source utilisateur

voix
1

Il suffit de retourner l'objet que vous souhaitez utiliser, et régler la référence sur le site d'appel.

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

myWidget = myWidget.Update()
Créé 26/08/2009 à 23:34
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more