2016-12-14 4 views
2

Короче говоря, я хотел бы знать, почему следующий код компилируется и запускается.Каков результат прикрепления лямбда-выражения к основному методу программы C#?

using System; 

namespace ConsoleApplication 
{ 
    public class Program 
    { 
     public static void Main(string[] args) => Console.WriteLine("Hello World!"); 
    } 
} 

Моих ограниченные знания C# говорят мне, что делегат с именем Main создаются, и по какой-то причине компилятора/выполнение принимает этот делегат в качестве действительной отправной точки для этой программы. Правильно ли я понимаю? Есть ли какая-то конкретная причина, чтобы подобное заявление использовалось?

Я столкнулся с этим, глядя на исходный код Roslyn, найденный here.

// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. 

using System.IO; 
using Microsoft.CodeAnalysis.CommandLine; 
using Roslyn.Utilities; 
using System; 

namespace Microsoft.CodeAnalysis.CSharp.CommandLine 
{ 
    public class Program 
    { 
     public static int Main(string[] args) 
      => Main(args, Array.Empty<string>()); 

     public static int Main(string[] args, string[] extraArgs) 
      => DesktopBuildClient.Run(args, extraArgs, RequestLanguage.CSharpCompile, Csc.Run, new DesktopAnalyzerAssemblyLoader()); 

     public static int Run(string[] args, string clientDir, string workingDir, string sdkDir, string tempDir, TextWriter textWriter, IAnalyzerAssemblyLoader analyzerLoader) 
      => Csc.Run(args, new BuildPaths(clientDir: clientDir, workingDir: workingDir, sdkDir: sdkDir, tempDir: tempDir), textWriter, analyzerLoader); 
    } 
} 

спасибо.

ответ

5
public static void Main(string[] args) => Console.WriteLine("Hello World!"); 

не является делегатом, потому что нет ключевого слова delegate. Это всего лишь метод/функция. То, как это написано, - это просто сокращенный способ написания простых методов/функций, введенных в C# 6. Он называется функцией выражения. См. C# : The New and Improved C# 6.0.

+0

Perfect. Спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^