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 回答