C鶞9.0新特性詳細――トッププログラム文(Top-LIever Prograams)


1背景と動機
通常、C〓〓だけを使ってコンソールの上で1行の“Hello World!”を印刷したいならば、これはConsone.WriteLineではないです。一つの文で済むことは、他の必要な基礎コード(定義類や入口関数Mainなど)にも関連しています。

using System;
class Program
{
  static void Main()
  {
    Console.WriteLine("Hello World!");
  }
}
「ハローワールド!」と印刷します。コードだけです。これは初心者だけでなく、コードをバラバラにして、インデントレベルを増やしました。これらの問題を解決するために,トップクラスのコード文という新しい特性を提案した。
2トップステートメント
2.1紹介
C〓〓の9.0の中で、クラスの定義と主な関数のMainの声明を省略して、あなたの核心の業務コードだけを書き出して、トップクラスの語句になりました。上のコードはトップステートメントで書いてもいいです。

using System;

Console.WriteLine("Hello World!");
このようにコードは簡潔で明瞭で、初心者にも分かりやすいです。ちょっとPythonと書いた感じですか?もちろん、どの言葉も許可されています。値を返したいなら、そうしてもいいです。awaitを使ってもいいです。コマンドラインのパラメータにアクセスしたいなら、argsも利用できます。ローカル関数を使ってもいいです。
任意のコードが使えますが、いくつかの規則が守らなければなりません。
  • トップステートメントは、using文コードの後ろに置かなければならない
  • トップステートメントは、任意のタイプまたは名前空間宣言の前に使用されなければならない
  • のトップクラスの語句は一つのソースコードファイルにしか書けません。今は一つのメーン方法しか書けないようです。
  • のトップクラスのステートメントで定義されたローカル関数と変数は、トップクラスのコードセグメントの外部のどこで呼び出してもエラーが発生します。
  • 以下のコードはより良い例です。
    
    using static System.Console;
    using System.Threading.Tasks;
    
    WriteLine("Hello,");
    Print(args[0]);
    await Task.Delay(1000);
    return 0;
    
    void Print(string arg)
    {
      WriteLine(arg);
    }
    2.2の原理
    私たちはC〓〓は対象に向かうプログラミング言語として、すべてのタイプは対象に向かうので、タイプとメンバーの定義があります。トップクラスの語句は表面的にはこの規則に違反しているように見えますが、実際にはありません。これは、トップステートメントが最終的にコンパイルされたときに、グローバルコマンド空間においてProgram類のMainメソッド体の中のコードとともに自動的に生成されるからです。以下の通りです
    
    static class Program
    {
      static async Task Main(string[] args)
      {
        //     
      }
    }
    ここでは、クラス名Programとメソッド名Mainを例に挙げるだけですが、コンパイラで生成されるのはこの名前ではありません。私たちはILコードを確認することで確認できます。

    トップステートメントに非同期動作とリターン値があるかどうかによって、生成された入口関数署名も異なる。具体的には下の表に示すように、
    戻り値があります
    戻り値が存在しません
    非同期が存在する
    async static TaskMain(string[]args)
    async static Task Main(string[]args)
    非同期は存在しない
    static int Main(string[]args)
    static void Main(string[]args)
    上のコードのように、生成された入口関数
    $は、以下のコードで表されています。
    
    static class Program
    {
      async static Task<int> Main(string[] args)
      {
        WriteLine("Hello");
        Print(args[0]);
        await Task.Delay(1000);
        return 0;
    
        void Print(string arg)
        {
          WriteLine(arg);
        }
      }
    }
    3おわりに
    トップクラスの語句を使って、コードを簡潔で明瞭に見えるようにします。初心者にとっても友好的です。本質的にはC〓の言語の元の文法構造を変えていません。いかなる語句でも使えます。追加の制限がありません。これらの点から言えば、確かな変化です。
    以上はC〓〓9.0の新しい特性の詳しい解です――トップクラスのプログラムの語句(Top-Link Prograams)の詳しい内容で、更にC〓〓9.0の新しい特性の資料に関して私達のその他の関連している文章に関心を持って下さい!