调用没有括号的函数?

tas*_*ula 2 c# windows-store-apps windows-8.1

我正在研究用于创建Windows 8.1应用程序的"Contose Cookbook"培训.

通过第一个实验室,我看到了类似的东西variable += function;.该函数没有paranthesis,据我所知,你可以创建没有paranthesis的函数,这些属性是属性,但你必须用它们调用它们.

这是我发现的一个类:

namespace ContosoCookbook
{
    sealed partial class App : Application
    {
        public App()
        {
            this.InitializeComponent();
            this.Suspending += OnSuspending;
        }

        private async void OnSuspending(object sender, SuspendingEventArgs e) 
        {
            var deferral = e.SuspendingOperation.GetDeferral();
            await SuspensionManager.SaveAsync();
            deferral.Complete();
        }

        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

什么类型的调用或函数是接受它的.

来自msdn 的Application.Suspending事件.

Mag*_*gus 5

有问题的事件处理程序接受一个与方法参数匹配的委托,允许它接受一个方法组.

举个简单的例子,任何Action变量都可以接受任何没有参数的void方法作为方法组.上面的事件处理程序的委托可能需要object指示发件人和某种类型EventArguments.

最常见的代表了是Action<T>,Func<T>并且Predicate<T>,它代表空隙的方法,具有指定的返回类型的方法,和方法,其分别返回布尔值.他们也可以被分配lambdas.它们都有不同数量的参数.它们在某些情况下非常有用.

请注意,分配委托不会调用它; 这可以在以后完成.代表们也可以合并.值得注意的是,委托可以使用局部变量做一些奇怪的事情:如果为委托分配类似于(name) => tempName += namewhere tempName局部变量的东西,则在调用委托时将修改局部变量.这是有道理的,但可能并不明显.