Замыкания
От: BogdanMart Украина  
Дата: 28.01.11 21:58
Оценка:
Както по дебильному немерле генерит замыкания
                  def param = getOmmParameter(Guid($(param.ID.ToString() : string))); // ну тут макрос, но можете счиатать что это строка "66d1a69e-37d2-4569-9c81-3dc0b441d4a5"
                  param.PropertyChanged += fun(_, e)
                  {
                    when (e.PropertyName == "Value")
                      OnPropertyChanged((param.Name : string));
                  }
                  
                  param.Value :> $(param.Type.ToString() : usesite)
                }



и на вызоде получается

    get
    {
        _N_closure_8066 e_ = new _N_closure_8066 {
            _N__N_closurised_this_ptr_8071 = this,
            _N_param_8073 = this.getOmmParameter(new Guid())
        };
        FunctionVoid<object, PropertyChangedEventArgs> @void = new _N__N_lambda__8057__8075(e_);
        e_._N_param_8073.PropertyChanged += new PropertyChangedEventHandler(@void.apply_void);
        return (double) e_._N_param_8073.Value;
    }



Вопроссы
1) зачем Гуид пихать в замыкание? Если он ипсользуеться только в теле метода..
2) Зачем вообще создавать класс _N__N_lambda__8057__8075, C# создает в таком случаае приватный метод с рандомным именем, и подписывает на событие делегат на этот метод.

Я бы не возущался... но есть один нюанс, мы используем WeakDelegatе и по этому _N__N_lambda__8057__8075 запроста уберется сборщиком мусора... очень печально.

Это создавать целый метод для такой тривиальной задачи... а шарп справлялся...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.