プリプロセッサでの C# マクロ定義

Harshit Jindal 2023年10月12日
  1. C# で静的 using 宣言を使用する
  2. C# の静的クラスで Wrap 関数を使用する
プリプロセッサでの C# マクロ定義

言語としての C# はマクロをサポートしていません。C や C++ のようなプリプロセッサはありません。

ただし、C# には、C# プロジェクトファイル内にビルド前の C / C++ プログラムを追加することにより、プリプロセッサの機能とマクロを模倣するプロジェクトファイルがあります。

この方法では望ましい結果が得られる場合がありますが、本番環境でこのようなトリックを使用することはお勧めできません。また、予期しない動作が発生する場合もあります。

新しいバージョンの C# では、特定のマクロを模倣することができ、C / C++ アプリケーションで C# プロジェクトファイルをリギングするよりも、それらの使用法を優先する必要があります。このチュートリアルでは、C# の機能のようなマクロを作成する方法を説明します。

C# で静的 using 宣言を使用する

static using declarative を使用すると、クラス名の入力を毎回省略できます。それらは静的宣言によって名前空間クラス名の絶え間ない再利用を減らします。

using static System.Console;  // Note the static keyword

public class Program {
  public static int Main(string[] args) {
    WriteLine("C# macro!!");

    return 0;
  }
}

出力:

C# macro!!

上記の例では、静的宣言により、コンソール関連のすべてのコマンドでの SystemConsole の継続的な再利用が削減されます。はるかに少ないコードを記述できるクールなマクロを提供します。

これは任意の C# ライブラリで使用でき、これらすべてのクロスアセンブリ呼び出しを行います。

C# の静的クラスで Wrap 関数を使用する

パブリック静的クラスを宣言し、その中に C# をラップする機能を使用することで、マクロを使用できます。静的初期化は、コードの残りの部分の前に発生し、マクロの前処理の側面を模倣するのに役立ちます。

using System;
public static class WriteToConsoleExtension {
  public static void WriteToConsole(this object instance, string format, params object[] data) {
    Console.WriteLine(format, data);
  }
}
public class Program {
  public static int Main(string[] args) {
    Program p = new Program();
    p.WriteToConsole("C# macros!! {0}st method", 1);

    return 0;
  }
}

出力

C# macros!! 1st method

上記の例では、既存のシステム関数の名前を目的のマクロに変更することができました。ただし、唯一の問題は、プログラム変数を介してそれらを呼び出さなければならないことです。

したがって、この方法を実行したくない場合は、1つを選択することをお勧めします。

著者: Harshit Jindal
Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn