2012-07-30 7 views
0
[MyAttribute(Name = "Test123"] 
public MyClass 
{ 
    public string Name 
    { 
     get { return "Test123"; } 
    } 
} 

이 코드 샘플은 무엇입니까? 이름을 두 번 정의해야합니다. 속성에서 한 번, 클래스 자체에서 한 번 이런 종류의 중복을 피할 수있는 방법이 있습니까?특성 : 코드 중복 방지

언젠가는 어셈블리를 통해 MyAttribute을 사용하는 모든 클래스를 찾고 (이름과 함께) 나열하기 때문에 둘 다 필요합니다. 다른 때에는 인스턴스화 된 객체에 액세스 할 수 있으므로이 속성을 사용하고 싶지 않습니다.

+1

사용 방법과 방법에 따라 다릅니다. 이 정보를 더 제공 할 수 있습니까? –

답변

2

문자열 상수에 이름을 넣을 수 있으면 해당 상수를 특성 매개 변수와 속성의 반환 값에 모두 사용할 수 있습니다.

이름을 변경해야하는 경우 const 값을 변경하십시오.

[MyAttribute(MyClass.MyClassName)] 
public MyClass 
{ 
    private const string MyClassName = "Test123"; 

    public string Name 
    { 
     get { return MyClass.MyClassName; } 
    } 
} 
1

다음과 같은 것이 작동 할 수 있습니다. 그것은 신 - 엄청 비효율적 일 것입니다. 참고, 아래 코드를 테스트하지는 않았지만 가까이 있어야합니다.

[MyAttribute(Name = "Test123"] 
public MyClass 
{ 
    public string Name 
    { 
     get { return ((MyAttribute)(GetType().GetCustomAttributes(typeof(MyAttribute), true).First())).Name; } 
    } 
} 

왜 처음에는 속성과 속성이 필요합니까? 특히 Name 속성이 "정적"(유형에 연결됨)이고 속성이 인스턴스이므로 두 가지 모두 필요하다는 사실은 잘못되었습니다.