2016-06-27 2 views
-1

이 답변은 이미 보았지만 나에게 도움이되지 못했습니다. 파생 된 인스턴스에서 기본 클래스의 (정적이 아닌) 클래스 정적 속성에 액세스하려고합니다. 기본 클래스 리플렉션을 통해 정적 속성 가져 오기

:

Type type = this.GetType(); 
PropertyInfo propInf = type.GetProperty("DirectoryCode", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); 

여기 propInf는 (타입이 파생 된 클래스 타입) 널 (null)이다. 파생 클래스에서

:

public class DTGCSMissonParameters : ModelBase 
{ 
    public static ushort DirectoryCode = (ushort) DIR.MISSION_PARAMETERS; 

감사 @JeroenVanLangen이 코멘트에 지정된대로

+3

정의한 것은 ** 필드 ** ** 속성 **이 아니므로 재산. ** C# 6.0 ** _try :'public static ushort DirectoryCode {get; } = (ushort) DIR.MISSION_PARAMETERS;'_ –

+0

@JeroenvanLangen 답변으로 작성하십시오. 쓰기 : "GetProperty"대신에'GetField'를 사용하십시오. –

+0

나는 Bjarke가 이미 한 것을 본다. 그래서 나는 그를지지 할 것이다. _ (비슷한 답변을 추가하는 것을 좋아하지 않습니다.) _ –

답변

3

, 당신은 필드 대신 속성을 정의했다. 올바른 문장은 다음과 같아야합니다

// C# 6.0 
public static ushort DirectoryCode => (ushort) DIR.MISSION_PARAMETERS; 

// Pre-C# 6.0 
public static ushort DirectoryCode 
{ 
    get { return (ushort) DIR.MISSION_PARAMETERS; } 
} 

@Edit : Jeppe의 Stig 닐슨 코멘트에 지적한 바와 같이, 제안 된 솔루션의 첫 번째 속성이 액세스 할 때마다 평가 될 것이다. 이것을 피하고 단순히 속성 자체의 값을 그대로 유지하려면 다음을 사용하십시오.

+2

아니면 필드를 그대로 사용하려면 'GetProperty'대신 'GetField'를 사용하십시오. –

+1

주 : 제안 사항은 속성의'get' 접근자가 호출 될 때마다'DIR.MISSION_PARAMETERS'를 다시 평가합니다. 그것은 그 현장이 한 것이 아닙니다. 'DIR.MISSION_PARAMETERS'를 한 번만 평가하고 (DTGCSMissonParameters'의 정적 생성자가 실행될 때) 일찍 만 평가하려면'public static ushort DirectoryCode {get; } = (ushort) DIR.MISSION_PARAMETERS;'대신에. –

+0

감사! VS2013을 C# 5와 함께 사용하면서 GetField를 사용하게 될 것입니다. VS2015를 구하려고 노력할 것입니다. 지금은 작동합니다. – mikepa88

관련 문제