문제

C#에서는 변수 이름을 '@' 문자로 시작할 수 있다는 것을 발견했습니다.내 C# 프로젝트에서는 Java로 작성된 웹 서비스(내 프로젝트에 웹 참조를 추가함)를 사용하고 있었습니다.WSDL에 정의된 인터페이스 개체 중 하나에는 "params"라는 이름의 멤버 변수가 있습니다.분명히 이것은 C#의 예약어이므로 "params"라는 이름의 멤버 변수가 있는 클래스를 가질 수 없습니다.생성된 프록시 객체에는 다음과 같은 속성이 포함되어 있습니다.

public ArrayList @params {
    get { return this.paramsField; }
    set { this.paramsField = value; }
}

VS 2008 C# 문서를 검색했지만 이에 대한 내용을 찾을 수 없습니다.또한 Google을 검색해도 유용한 답변을 얻지 못했습니다.그렇다면 변수/속성 이름에서 '@' 문자의 정확한 의미나 사용법은 무엇입니까?

도움이 되었습니까?

해결책

바로에서 C# 언어 사양, 식별자(C#) :

Prefix "@"는 키워드를 식별자로 사용하여 다른 프로그래밍 언어와 인터페이스 할 때 유용합니다.문자 @는 실제로 식별자의 일부가 아니므로 식별자는 접두사없이 다른 언어로 다른 언어로 볼 수 있습니다.@ prefix가있는 식별자를 구두 식별자라고합니다.

다른 팁

단지 예약어를 변수 이름으로 사용할 수 있습니다.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

생각을 사용하는 것은 일반적인 관행이 아닙니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top