Как правильно распоряжаться объектом - PullRequest
2 голосов
/ 12 июня 2010

Я испытываю что-то странное, и у меня уже есть обходной путь, но я не думаю, что хорошо это понял.

Если я несколько раз вызываю метод ниже в классе:

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

 a.Delegate1Handler = ViewSomething();
}

Если я вызываю Method () несколько раз в одном экземпляре класса, в котором он находится ... Я переинициализирую "a" каждый раз, но по какой-то причине a.Delegate1Handler все еще находится рядом с предыдущей инициализацией, поэтому ViewSomething () вызывается снова и снова и снова ....

Я чувствую, что забыл здесь что-то критическое?

Кишки Фу выглядят так:

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

РЕДАКТИРОВАТЬ: (обходной путь, который я вставил, описан ниже, но я до сих пор не понимаю точно, почему он так себя ведет) ->

Инициализировано «a», и его делегат1Handler находится вне «метода», где делегат1Handler инициализируется только один раз, а «а» может быть снова инициализировано - нет проблем! (или, может быть, это я не знаю)

Ответы [ 2 ]

1 голос
/ 12 июня 2010

a.Delegate1Handler = ViewSomething();

Для меня это говорит о том, что ViewSomething() - это метод, который возвращает делегата.

ViewSomething() будет вызываться при каждом запуске Method()

0 голосов
/ 12 июня 2010

Я думаю, что @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; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...