2

CLR 言語は Unicode を理解することが期待されています。たとえば、C# で Δ (Greek Delta) という名前の関数を定義できます。しかし、IL Asm でそのような関数を定義すると、コンパイラは非 ASCII シンボルについて文句を言います。この問題の解決策はありますか?

4

2 に答える 2

2

Unicode 文字を含むメソッドを IL (ILAsm でコンパイル) で記述でき、それらのメソッドを C# から呼び出すことができます。

まず、CLI 仕様の §I.5.3 からの構文:

識別子は、エンティティに名前を付けるために使用されます。単純な識別子は ID に相当します。ただし、ILAsm 構文では、Unicode 文字セットを使用して形成できる任意の識別子を使用できます。これを実現するには、識別子を一重引用符で囲みます。

これは、次の IL が機能することを意味します。

.assembly test {}
.assembly extern mscorlib {}

.class public Delta
{
  .method public static void 'Δ'()
  {
      .entrypoint
      ldstr "Hello, delta!"
      call void [mscorlib]System.Console::WriteLine(string)
      ret
  }
}

ただし、重要な点は、ファイルを UTF-16 として保存する必要があることです。そうしないと、他のプログラム (C# コンパイラを含む) が名前を正しく認識しません。

これで、C# から期待するのとまったく同じようにメソッドを呼び出すことができます: Delta.Δ().

于 2013-10-11T22:54:22.657 に答える