1

メソッドへの参照を作成し、「外部」コード (別の dll/プロジェクト) から参照できるという点で、デリゲートに頭を悩ませていると思いました。

現在、MVVM を使用していますが、デリゲートが渡されるのと同じ方法でパラメーターとしてメソッドを渡しているように見える RelayCommand と呼ばれるものが表示されます。これはどのように可能ですか?

私が見ているコードは

        public RelayCommand AddUserCommand { get; set; }

        public ViewModelMain()
        {
            this.AddUserCommand = new RelayCommand(AddUser, null);
        }

        void AddUser(object parameter)
        {
            //logic
        }

RelayCommand オブジェクトは

public class RelayCommand : ICommand
{
    public RelayCommand(Action<object> execute, Predicate<object> canExecute)
    {
         //logic
    }
}

では、デリゲートがないので、Action<> オブジェクトで何らかのトリックが発生していると想定できますか?

4

1 に答える 1

1

Action<object>デリゲートです。あなたが書くとき:

new RelayCommand(AddUser, null)

コンパイラはそれを次のように書き換えます。

new RelayCommand(new Action<object>(AddUser), null)

ご想像のとおり、メソッドへの参照が作成されます。

于 2013-02-26T10:21:41.807 に答える