2010-06-11 110 views
2

我遇到了一些奇怪的事情,並且已經有了解決方法,但是我認爲我沒有很好地理解它。如何正確處理對象

如果我請撥打了無數次的方法類中:

public void Method() 
{ 
Foo a = new Foo(); 

a.Delegate1Handler = ViewSomething(); 
} 

如果我叫()方法多次在課堂上,它是...我重新初始化「一」的一個實例每次,但由於某種原因,a.Delegate1Handler仍然是來自前面的初始化,因此ViewSomething()被一次又一次地調用...。

Foo的膽量樣子:

public delegate void Delegate1(T t); 
public Delegate1 Delegate1Handler { get; set; } 

編輯:(解決方法,我把在下面描述,但我還是不明白究竟爲什麼它表現這樣的) - >

初始化「a」,它是「Method」之外的delegate1Handler,其中delegate1Handler僅初始化一次,「a」可以再次重新初始化 - 沒問題! (或者也許是我不知道)

+0

那麼,有什麼解決辦法? – tzaman 2010-06-11 20:41:05

+1

你可以請發佈實際的代碼,而不是一個虛假的版本嗎?我懷疑問題出在您發佈的代碼中,因爲它不應該表現出您所描述的問題。 – 2010-06-11 20:44:18

+0

也許你應該發佈更多的代碼,以澄清你的怪異行爲。爲什麼你使用委託字段而不是公共事件? – 2010-06-11 20:49:31

回答

1

a.Delegate1Handler = ViewSomething();

對我來說,這表明ViewSomething()是返回一個代表的方法。

ViewSomething()將被稱爲每次運行Method()

0

時間我覺得@hans在他的評論中得到的是這樣的

public void Method() 
{ 
Foo a = new Foo(ViewSomething); 
} 

// ... 
public class Foo 
{ 
    public Foo(Delegate1 del) // note: accepting the delegate parameter 
    { 
     DelegateHandler = del; 
    } 
} 
public delegate void Delegate1(T t); 

public Delegate1 Delegate1Handler { get; set; }