9

重複の可能性:
C#の変数名での@文字の使用/意味は何ですか?

.netの開発を行っていたところ、メソッド呼び出しの前に@記号を追加できることに気付きました。

var message = dog.@SayHello();

不思議に思うのですが、なぜこれができるのですか?

4

5 に答える 5

10

シンボルはキーワードをエスケープし、@それらを通常の識別子に変えることができます。キーワードは言語に依存するため、ほとんどの .net 言語はこのようなメカニズムをサポートしています。そのため、他の言語で記述されたコードは、気付かないうちに言語のキーワードと衝突する可能性があります。

一部の人々@thisは、最初のパラメーター拡張メソッドを使用することを好みます。

public static void MyExtension(this MyType @this)

これが役立つ別のシナリオは、メンバーを使用して html 属性を表す場合です。classこの機能がなければ、属性を表すことができませんでした。

于 2011-08-30T15:21:40.967 に答える
6

C# キーワードを識別子として使用する別の言語で記述されたコードと相互運用する場合は、シンボルを任意@の識別子の前に付けることができます。

object @class; //allowed
object class;  //error
于 2011-08-30T15:22:03.107 に答える
6

これは、C# での有効な識別子の定義の一部にすぎません。

于 2011-08-30T15:22:26.360 に答える
3

@キーワードとして解釈される識別子を使用できます。

たとえば、class という名前の変数が必要な場合は、次のように記述できます。

int @class;

もちろん、できるからといって、やればいいというわけではありません。

テンプレートまたは外部ソースから C# コードを作成するコード ジェネレーターが役立つ場合があります。たとえばxsd.exe、XML スキーマをバックアップする C# クラスを作成する SDK コマンドライン ツールです。XML スキーマに、C# で予約されている要素または属性名 (class など) が含まれている場合xsd.exe、 は一致する C# クラスで名前を保持しますが、接頭辞として@.

于 2011-08-30T15:24:08.990 に答える
1

できるからといって、そうすべきというわけではありません。

于 2011-08-30T15:23:02.513 に答える