.Net識別子でどのような文字が使用されているのでしょうか?.Net/CLR識別子
C#またはVB.Netではなく、CLRです。私はこれを聞いて
理由は、私は(C# In Depth)yield return
文が実行されたかを見て、それは次のようなコードにコンパイルすることを見たされています
public int <count>5__1;
私が使用できる任意の他の識別子の文字がありますか?このコードは公開されません。
.Net識別子でどのような文字が使用されているのでしょうか?.Net/CLR識別子
C#またはVB.Netではなく、CLRです。私はこれを聞いて
理由は、私は(C# In Depth)yield return
文が実行されたかを見て、それは次のようなコードにコンパイルすることを見たされています
public int <count>5__1;
私が使用できる任意の他の識別子の文字がありますか?このコードは公開されません。
C#仕様には、どの文字を使用できるかが記載されています。
ただし、CLRではこれ以上のことが可能です。そのため、C#コンパイラはそれらをそのまま出力します。
これは、8.5.1章「有効な名前」、CLS仕様によって支配されている:
CLSは4ルール:アセンブリは、Unicode標準3.0のセットを支配 のテクニカルレポート15の附属書7に従います に許可された文字を識別子に含めることができます。オンラインで利用できるのは http://www.unicode.org/unicode/reports/tr15/tr15-18.htmlです。 は、Unicode正規化形式 で定義されている標準形式でなければなりません。CLS目的の場合、小文字の マッピング(Unicodeロケールに依存しない1対1の の小文字マッピング)同じ。すなわち、2つの識別子が であるとCLSの下で異なるとみなされる場合、それらは単に 以上に異なるものとする。ただし、継承された 定義を上書きするには、CLIで元の 宣言の正確なエンコーディングを使用する必要があります。
換言すれば、それは禁止事項文字のリストを指定していない、それは驚きなしで文字列を比較することができることについての唯一の懸念です。 CLRが今までにしなければならないことはすべてです。コンパイラの仕事ははるかに難しく、プログラム内のトークン、つまりレクサーの仕事を認識できなければなりません。実用的なレクサーの実装では、識別子内の有効な文字に関するルールを設定します。例えば、数字で識別子を始めることではありません。
CLRで許可されているものがCLR仕様で定義されていると思います。 – Richard
@リチャード:CLRは引用されるとほとんど何でも許します。例: ''!2ss <、 ''はILで有効です。 – leppie
非常に興味深い!この動作は古いバージョンのCLRにも戻りますか? – Darkzaelus