调用没有括号的函数?

时间:2014-03-14 16:07:49

标签: c# windows-store-apps windows-8.1

我正在看" Contose Cookbook"有关创建Windows 8.1应用程序的培训。

通过第一个实验室,我看到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();
        }

        ...
    }
}

接受此类型的呼叫或功能是什么类型。

来自msdn。的<{3}}事件。

3 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:3)

除了Magus&#39;回答,这是调用函数,它正在传递对可能稍后调用的函数的引用。

答案 2 :(得分:0)

这是一个事件绑定代码 您可能想查看此Events