C#의 변수 이름에서 @ 문자의 용도/의미는 무엇입니까?
-
01-07-2019 - |
문제
C#에서는 변수 이름을 '@' 문자로 시작할 수 있다는 것을 발견했습니다.내 C# 프로젝트에서는 Java로 작성된 웹 서비스(내 프로젝트에 웹 참조를 추가함)를 사용하고 있었습니다.WSDL에 정의된 인터페이스 개체 중 하나에는 "params"라는 이름의 멤버 변수가 있습니다.분명히 이것은 C#의 예약어이므로 "params"라는 이름의 멤버 변수가 있는 클래스를 가질 수 없습니다.생성된 프록시 객체에는 다음과 같은 속성이 포함되어 있습니다.
public ArrayList @params {
get { return this.paramsField; }
set { this.paramsField = value; }
}
VS 2008 C# 문서를 검색했지만 이에 대한 내용을 찾을 수 없습니다.또한 Google을 검색해도 유용한 답변을 얻지 못했습니다.그렇다면 변수/속성 이름에서 '@' 문자의 정확한 의미나 사용법은 무엇입니까?
다른 팁
단지 예약어를 변수 이름으로 사용할 수 있습니다.IMHO는 권장되지 않습니다(귀하와 같은 경우 제외).
C#에서 at(@) 문자는 언어 사양의 관련 규칙을 명시적으로 따르지 않는 리터럴을 나타내는 데 사용됩니다.
특히 예약된 키워드와 충돌하는 변수 이름에 사용할 수 있습니다(예: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
하지만 @
접두사는 사용, 여러분이 발견한 바와 같이 이를 사용하여 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";
단순히 예약어를 변수 이름으로 사용할 수 있게 해줍니다.나는 var라는 이름을 원했습니다. event
다른 날.같이 가기로 했어 _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];
}
키워드를 식별자의 이름으로 사용하면 컴파일러 오류 "식별자 예상, '식별자 이름'이 키워드입니다.이 오류를 극복하기위한 키워드입니다.이러한 식별자는 축어적 식별자입니다.@ 문자는 실제로 식별자의 일부가 아니므로 다른 언어에서는 식별자가 접두사 없이 일반 식별자로 표시될 수 있습니다.
예약된 키워드를 다음과 같은 변수 이름으로 사용하는 데 사용할 수 있습니다.
int @int = 3;
컴파일러는 다음을 무시합니다. @
변수를 다음과 같이 컴파일하십시오. int
생각을 사용하는 것은 일반적인 관행이 아닙니다.