2012-03-16 11 views
5

Yapıcıda bir A Sınıfı var ... Object_B's eventHandler'a anonim bir işlev atayım.Bir sınıfın Dispose yöntemindeki anonim bir işlev nasıl iptal edilir?

A sınıfı yöntemini Dispose yönteminden nasıl silebilirim (abonelikten kaldır)?

Herhangi bir yardım için teşekkür ederiz! Teşekkürler.

+0

B_Object nedir? A sınıfı üye değişkendir mi? Ve A dışında herhangi bir yere erişir mi? başka dinleyicileri olabilir mi? –

+0

[C# aboneliğini iptal et] olası bir kopyası (http://stackoverflow.com/questions/183367/unsubscribe-anonymous-method-in-c-sharp) –

+0

evet, üye ... B – Relativity

cevap

7

Temelde yapamazsınız. Ya bir yöntem haline taşımak veya sonrası için temsilci tutmak için üye değişkeni kullanabilirsiniz:

public class A : IDisposable 
{ 
    private readonly EventHandler handler; 

    public A() 
    { 
     handler = (sender, e) => 
     { 
      Line 1 
      Line 2 
      Line 3 
      Line 4 
     }; 

     B_Object.DataLoaded += handler; 
    } 

    public override void Dispose() 
    { 
     B_Object.DataLoaded -= handler; 
    } 
} 
+0

Sınıfının hangi örneği lanet olsun, beni yendin! – Robbie

+0

Bu yüzden, eğer aboneliği iptal etmediysek ... belli ki bir bellek sızıntısı getirecek, değil mi? – Relativity

+1

@Relativity: Mutlaka değil. B_Object.DataLoaded' hakkında gerçekten konuşmadıysanız - eğer aslında * statik bir olay yerine bir örnek olayı *, eğer nesne toplanırsa etkinlik aboneliği artık önemli olmayacaktır. Her şey içeriğe bağlıdır ... –

0

Bu, işleyici değişkenini kullanmadan bir alternatiftir.

İlgili konular