2010-05-12 6 views
8

나는 the source code of StyleCop를 탐색하고있어, 나는 호기심이 일 발견C# 클래스의 @namespace 필드 란 무엇입니까?

/// <summary> 
/// The namespace that the rule is contained within. 
/// </summary> 
private string @namespace; 

// [...] 

internal Rule(string name, string @namespace, string checkId, string context, bool warning) : this(name, @namespace, checkId, context, warning, string.Empty, null, true, false) 
{ 
    Param.Ignore(name, @namespace, checkId, context, warning); 
} 

이 일이 무엇입니까? 그저 단순한 필드입니까? namespace 키워드가 아니라 at-sign이 필드임을 나타내는 데 사용됩니까? 그렇다면 예약어에 at-sign을 사용할 수 있습니다 (예 : @dynamic, @using 등).

+0

예약어뿐만 아니라, @ *로 * 식별자를 시작할 수 있습니다. 왜? * 미래에 어떤 단어가 키워드가 될지 모르기 때문에 *. 만약 당신이 편집증적이고 언젠가 우리가 "ㅋㅋ"를 문맥 적 키워드로 만들 것을 두려워한다면 "int @blah;"라고 말할 수 있습니다. blah 연산자를 추가 할 때도 코드가 계속 컴파일되는지 확인하십시오. –

+0

필드의 이름은 "@namespace"가 아니라 "namespace"입니다. @는 컴파일러에게 "다음은 키워드가 아니라 이름입니다"라고 알려줍니다. 그렇지 않으면 무시됩니다. –

답변

4

예 @ 기호는 변수 이름으로 사용할 수 있도록 예약어 앞에 붙일 수 있습니다.

var @dynamic = ... 
var @event = .... 

는 사실은 예 Bascially

6

this question에서 배운, 그리고 다른 것들. 변수 이름 앞에 @를 넣으면 해당 변수 이름이 키워드이기 때문에 오류가 발생하지 않습니다.

http://msdn.microsoft.com/en-us/library/x53a06bb(VS.71).aspx

+3

밑줄 (또는 다른 문자)을 앞에 긋는 것과 다른 점은 무엇입니까? – adrianm

+2

@adrianm : 내가 발견 한 차이점은 리플렉션을 사용할 때'_namespace'가 'namespace'일 경우'FieldInfo.Name'이고'_namespace'의 이름은 '_namespace'입니다. –

1

예, 당신은 당신의 변수의 first and only first 문자로 @을 사용할 수 있습니다.

0

다른 사람들은 정확하게 '@'접두어가 붙어있는 한 예약 된 키워드를 사용할 수 있지만 IMHO은 좋은 개발 방법이 아닙니다. 차라리 컴퓨터 생성 코드에서만 사용하고 싶습니다 (예를 들어 회사에서 Java 코드를 C#으로 변환하는 도구가 있습니다. Java "이벤트"는 예약어가 아니기 때문에 Java 소스 코드는 이러한 식별자 포함)

베스트

아드리

1

식별자가 목표 언어의 키워드 예 것을 제조 할 수 있기 때문에이 기술은 일반적으로, 자동 코드 생성과 짝 Xml 스키마에 C# 클래스를 생성하기 위해 코드 생성이 실행되면 스키마에 "event"라는 특성이있을 수 있습니다. 이것은 C# 키워드이므로 코드 생성기는 대신 "@event"를 사용할 수 있습니다.