C#で「@」文字で変数名を開始できることを発見しました。私のC#プロジェクトでは、Javaで記述されたWebサービスを使用していました(プロジェクトにWeb参照を追加しました)。 WSDLで定義されているインターフェイスオブジェクトの1つに、「params」という名前のメンバー変数がありました。明らかに、これはC#の予約語なので、「params」という名前のメンバー変数を持つクラスを作成することはできません。生成されたプロキシオブジェクトには、次のようなプロパティが含まれていました。
public ArrayList @params {
get { return this.paramsField; }
set { this.paramsField = value; }
}
VS 2008 c#のドキュメントを検索しましたが、それについて何も見つかりませんでした。また、Googleを検索しても有用な答えは得られませんでした。それでは、変数/プロパティ名の「@」文字の正確な意味または使用は何ですか?
予約語を変数名として使用できます。私見はお勧めしません(あなたのような場合を除く)。
C#では、アット(@)文字を使用して、言語仕様の関連規則に明示的に準拠していないリテラルを示します。
具体的には、予約済みのキーワードと競合する変数名に使用できます(たとえば、paramsは使用できませんが、代わりに@paramsを使用できます。言語仕様のout/ref /他のキーワードと同じです)。さらに、エスケープされていない文字列リテラルにも使用できます。これは、特にパス定数に関連しています。の代わりに path = "c:\\temp\\somefile.txt"
あなたは書ける path = @"c:\temp\somefile.txt"
。正規表現にも非常に便利です。
Perlのシギルとは異なり、@
C#の変数名の前の接頭辞には意味がありません。 x
が変数の場合、@x
は、同じ変数の別の名前です。
> string x = "abc";
> Object.ReferenceEquals(x, @x).Dump();
True
しかし @
接頭辞にはseがあります。これは、C#が違法として拒否する変数名を明確にするために使用できます。
> string string;
Identifier expected; 'string' is a keyword
> string @string;
@
記号を使用すると、変数名に予約済みキーワードを使用できます。好む @int
、@string
、@double
など.
例えば:
string @public = "Reserved Keyword used for me and its fine";
上記のコードは正常に機能しますが、以下は機能しません。
string public = "This will not compile";
単に予約語を変数名として使用できます。先日、event
という変数が必要でした。私は_event
代わりに、私の同僚は、私はただそれを呼ぶことができると思い出した@event
代わりに。
別のユースケースは、拡張メソッドです。最初の特別なパラメーターは、@this
名で実際の意味を示すために区別できます。例:
public static TValue GetValueOrDefault<TKey, TValue>(
this IDictionary<TKey, TValue> @this,
TKey key,
TValue defaultValue)
{
if ([email protected](key))
{
return defaultValue;
}
return @this[key];
}
キーワードを識別子の名前として使用すると、コンパイラエラー「識別子が必要です。「識別子名」はキーワードです」を取得します。このエラーを克服するには、識別子の前に「@」を付けます。このような識別子は逐語的な識別子です。文字@は実際には識別子の一部ではないため、他の言語では接頭辞なしの通常の識別子と見なされる場合があります。
次のような変数名として予約済みキーワードを使用するために使用できます
int @int = 3;
コンパイラは@
を無視し、変数をint
としてコンパイルします
思考を使用することは一般的ではありません