这个示例使用委托()的确切含义是什么?

时间:2019-01-02 11:17:40

标签: c#

我不太喜欢 C#(我来自Java),并且对与该示例相关的 delegate 方法的工作方式有以下疑问:

List<string> urlList = IndirizziProtocolliSQL.GetListaIndirizziSiti(dbConfig);

foreach (string currentUrl in urlList)
{
    Debug.Print("Current url: " + currentUrl);

    SPSecurity.RunWithElevatedPrivileges(delegate ()
    {
        using (SPSite oSiteCollection = new SPSite(currentUrl))
        {
            using (SPWeb oWebsite = oSiteCollection.OpenWeb())
            {
            }
        }
    });
}

据我了解,阅读官方文档: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/delegates/

delegate()用于将一个方法作为另一个方法的输入参数。

例如,如果我有类似的内容:

public delegate int MyDelegate (string s);

它表示对具有该方法签名的任何方法的引用(返回类型,方法名称,放入参数)。

如果正确,那第一个原始示例到底是什么意思?为什么相反,方法签名有一个 using(...){...} 块?

此语法的确切含义是什么?

1 个答案:

答案 0 :(得分:5)

delegate () { }仅表示一个匿名内联方法/委托已传递给该函数。该方法的主体就像任何C#代码块一样,可以包含using语句或任何其他语句。

这类似于:

private void Method()
{
    using (SPSite oSiteCollection = new SPSite(currentUrl))
    {
        using (SPWeb oWebsite = oSiteCollection.OpenWeb())
        {
        }
    }
});

SPSecurity.RunWithElevatedPrivileges(Method);