2009-08-26 6 views
1

Ich bin nicht sicher, wirklich, wie diese Frage stellen .. hoffentlich wird meine Erklärung klären:Gibt es eine Möglichkeit, eine Instanz eines Objekts auf das aktuelle instanziierte Objekt innerhalb seiner eigenen Klasse festzulegen?

ich in einer Klasse eine öffentliche Methode habe, sagt Widget, das eine Liste von Widgets nimmt und sie ändern. Manchmal befindet sich das Widget, das die Methode aufruft, jedoch in dieser Liste. Gibt es eine Möglichkeit, das aktuelle Objekt als eines der Elemente in der Liste festzulegen?

Zum Beispiel ist hier, was ich versuche zu tun:

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 
+0

Machen Sie es zu einer statischen Methode? –

+0

kann es nicht statisch machen (geteilt), leider. es ist geerbt. – Jason

Antwort

3

Nein, aber was Sie können tun müssen, ist Ihre Aufgabe, ein Ereignis ausgelöst, die die Referenzierung (parent) Objekt lauscht und ersetzt das Objekt entsprechend.

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) 
+0

Interessante Idee! (vorausgesetzt, das ist genau das, was er versucht) –

0

Me verweist auf die Instanz der Klasse, in der der Code ausgeführt wird und kann nicht verändert werden. (Dies in C#) Es kann nicht wie eine Variable verwendet werden.

+0

Die aktuelle Instanz ist dies in C#. – recursive

0

Was versuchen Sie auf einem höheren Niveau?

Ich meine, warum versuchen Sie, das aktuelle Objekt in eines der Objekte in dieser Liste zu "ändern"?

Wenn Sie die Referenzen ändern möchten, die andere Personen zu Ihrem aktuellen Objekt haben, sodass sie jetzt auf ein anderes Objekt zeigen, dann können Sie das nicht tun.

Auch scheint es, als ob Sie das Objekt nehmen, das "ich" bereits ist, und versuchen, es "Ich" zuzuweisen. Was ist der Zweck?

+0

auf einer höheren Ebene, auf einer Seite (relevant für ein einzelnes Formular) Ich aktualisiere alle relevanten Formulare in eine übergeordnete Reihenfolge, da die Aktionen eines Formulars andere Formulare beeinflussen können, aber ich möchte das Formular für diese Seite auswählen und neu binden es zur Form. – Jason

1

Geben Sie einfach das Objekt zurück, das Sie verwenden möchten, und legen Sie die Referenz an der Aufrufsite fest.

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

myWidget = myWidget.Update() 
Verwandte Themen