C #에서 ‘@’문자로 변수 이름을 시작할 수 있음을 발견했습니다. 내 C # 프로젝트에서 Java로 작성된 웹 서비스 (프로젝트에 웹 참조를 추가했습니다)를 사용하고있었습니다. WSDL에 정의 된 인터페이스 오브젝트 중 하나에 이름이 “params”인 멤버 변수가 있습니다. 분명히 이것은 C #에서 예약어이므로 이름이 “params”인 멤버 변수를 가진 클래스를 가질 수 없습니다. 생성 된 프록시 오브젝트에는 다음과 같은 특성이 있습니다.
public ArrayList @params {
get { return this.paramsField; }
set { this.paramsField = value; }
}
VS 2008 c # 설명서를 검색했지만 아무것도 찾지 못했습니다. 또한 Google 검색으로 유용한 답변을 얻지 못했습니다. 변수 / 속성 이름에서 ‘@’문자의 정확한 의미 또는 사용은 무엇입니까?
답변
스트레이트에서 C # 언어 사양 , 식별자 (C #을)
:
접두사 “@”를 사용하면 키워드를 식별자로 사용할 수 있으며 다른 프로그래밍 언어와 인터페이스 할 때 유용합니다. @ 문자는 실제로 식별자의 일부가 아니므로 다른 언어에서는 식별자가 접두사없이 일반 식별자로 표시 될 수 있습니다. @ 접두사가있는 식별자를 완전 식별자라고합니다.
답변
예약어를 변수 이름으로 사용할 수 있습니다. IMHO (권장 사항이없는 경우 제외)를 권장하지 않습니다.
답변
C #에서 at (@) 문자는 언어 사양의 관련 규칙을 명시 적으로 준수하지 않는 리터럴을 나타내는 데 사용됩니다.
특히 예약 된 키워드와 충돌하는 변수 이름에 사용할 수 있습니다 (예 : 매개 변수는 사용할 수 없지만 언어 사양의 다른 키워드와 동일하게 @params를 대신 사용할 수 있음). 또한 이스케이프 처리되지 않은 문자열 리터럴에 사용할 수 있습니다. 이것은 경로 상수와 특히 관련 path = "c:\\temp\\somefile.txt"
이 있습니다 path = @"c:\temp\somefile.txt"
. 예를 들어 쓸 수 있습니다 . 정규 표현식에도 유용합니다.
답변
Perl의시길과 달리 @
C #에서 변수 이름 앞 의 접두사는 의미가 없습니다. x
변수 인 경우 @x
동일한 변수의 다른 이름입니다.
> string x = "abc";
> Object.ReferenceEquals(x, @x).Dump();
True
그러나 @
접두사는 가지고 사용을 당신은 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
전날 var를 원했습니다 . 나는 _event
대신 에 갈 텐데 , 동료가 @event
대신 전화 할 수 있다는 것을 상기시켰다 .
답변
또 다른 사용 사례는 확장 방법입니다. 첫 번째 특수 매개 변수는 @this
이름 으로 실제 의미를 나타 내기 위해 구별 될 수 있습니다 . 예를 들면 :
public static TValue GetValueOrDefault<TKey, TValue>(
this IDictionary<TKey, TValue> @this,
TKey key,
TValue defaultValue)
{
if (!@this.ContainsKey(key))
{
return defaultValue;
}
return @this[key];
}