如何正确处理对象

时间:2010-06-11 20:38:42

标签: c# design-patterns oop delegates

我正在经历一些奇怪的事情并且已经有了解决方法,但我认为我并不理解。

如果我在课堂上多次调用方法:

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

 a.Delegate1Handler = ViewSomething();
}

如果我在它所在的类的一个实例中多次调用Method()...我每次都重新初始化“a”但由于某种原因,a.Delegate1Handler仍然在前一次初始化时,并且因此,一次又一次地调用ViewSomething()......

我觉得我忘记了一些关键的东西吗?

Foo的胆量看起来像:

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

编辑:(我在下面介绍了解决方法,但我仍然不明白为什么会这样做) - >

在“方法”之外初始化“a”和它的delegate1Handler,其中 delegate1Handler 仅初始化一次,“a”可以再次重新初始化 - 没问题! (或者也许是我不知道)

2 个答案:

答案 0 :(得分:1)

a.Delegate1Handler = ViewSomething();

对我来说,这表明ViewSomething()是一个返回委托的方法。

每次运行ViewSomething()

时都会调用

Method()

答案 1 :(得分: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; }