web-dev-qa-db-ja.com

C#クラス名にはどの文字を使用できますか?

C#クラス名で許可される文字と許可されない文字は何ですか?助けてもらえますか?

編集:指定します。どのような特殊文字が許可されていますか?高度な言語の50ページの仕様へのリンクは、私にとって大いに役立つ答えではないため、具体的に説明してください。

説明:私が達成しようとしているのは、クラス名を次のように区別可能な部分に分割することです:

クラスPerson @ WorkOffice @ Helper @ Class

{

}

そして、このクラス名からPerson、WorkOffice、Helper、Classの一部を取得できるようにするために、ある種のキャラクターなどを使用する方法について考えます。

そして、はい、私はそれがクレイジーであることを知っていますが、私はそれが必要です。属性とリフレクションを使用してこのデータをクラスメタに格納できることは知っていますが、そうではないため、この解決策を提案しないでください。

59

仕様の詳細は こちら です。基本的に、 文字クラスLLlLt 、-のUnicode文字(Unicodeエスケープを含む) LmLoNlMnMcNd =、 PC 、および CF 。最初の文字は例外であり、文字でなければなりません(クラス LLlLtLm 、または Lo )またはアンダースコア。識別子がキーワードである場合にも、あなたはそれの前に@を堅持しなければなりません。それ以外の場合、@はオプションです。

64
thecoop

C#の有効な識別子は、 C#言語仕様 、アイテム9.4.2で定義されています。ルールは非常に簡単です。

  • 識別子は文字またはアンダースコアで始まる必要があります
  • 最初の文字の後に、数字、文字、コネクタなどが含まれる場合があります
  • 識別子がキーワードの場合は、先頭に「@」を付ける必要があります

ソース

24
Jeremy Coenen

Unicodeカテゴリは次の場所にあります: http://www.dpawson.co.uk/xsl/rev2/UnicodeCategories.html

そしてそこから、グループ内からほとんどのものを選択できます( specs から、他の人も正しく指し示しています):

Lu、Ll、Lt、Lm、Lo、Nl、Mn、Mc、Nd、Pc、Cf

ただし、Visual Studio(またはResharper)は必ずしもそれらすべてを好むわけではありませんが、それらのほとんどはコンパイルを行います。たとえば、キャラクター30FB KATAKANA MIDDLE DOTを取り上げます。コンパイルは正常に完了しますが、IDEでニースを再生しません。しかし、この奇妙なFE34プレゼンテーションフォームは、垂直波状低ラインのためにうまく機能します。

ここでは罰金を作品区切り文字です。

class Person〱WorkOffice〱Helper〱Class
{

}

私は、私も変な文字を使用することをお勧めしますとは言いませんよ。しかし、このような特別な行事のためのようだ:)

編集:ユニコード3.0からの文字を許可するように仕様が述べていることに注意してください。私はそれを見落とし、多くのキャラクターが適切なグループに属しているにもかかわらず、なぜ機能しないのか疑問に思いました。 詳細については、この質問を確認してください。

14
asgerhallas

Thecoopが示すように、Unicodeのコンテキストにおける「文字」という用語は、アルファベット文字よりもはるかに広いことに注意してください。

基本的に、多くの nicodeシンボル は、Windowsで 入力が難しい であっても、識別子で有効に使用できます。

例として:

  • Altキーを押したままにする
  • キーパッドで「0394」と入力します
  • ALTをリリース

コードにギリシャ語の大文字のデルタを追加します...これは、C#に関する限り有効な識別文字です。

ただし、CLSへの準拠は範囲外になりますが、その音によって、とにかくあまり心配する必要はないことに注意してください。

3
jerryjvl

以下に役立つ記事を示します。 C#コーディング標準と命名規則

table

要するに、一般的に、オブジェクトの最初の単語/部分/文字はlowercaseであり、クラスはuppercase

例えば:

HtmlHelper htmlHelper; 
FtpTransfer ftpTransfer;
UIControl uiControl;
0
V.7