2011-09-21 4 views
6

코드에서 일부 개체 및 클래스의 상태에 대한 정보를 기록하려고합니다. 모든 클래스 나 라이브러리가 직렬화로 구현 된 것은 아닙니다. 그래서 Properties의 Reflection을 사용하여 상태의 XML 문서를 작성합니다. 그러나, 나는 내장 클래스 (Strings, DateTime, Numbers 등)와 같은 일부 객체가 의미있는 방식으로 클래스의 값을 출력하는 ToString 함수를 가지고 있다는 점에서 문제가있다. 그러나 다른 클래스의 경우 ToString을 호출하면 상속 된 기본 ToString을 사용하여 객체 유형 (예 : 사전)의 이름을 불러 낼 수 있습니다. 이 경우 해당 클래스 내부의 속성을 재귀 적으로 검사하려고합니다.개체가 C에서 명시 적으로 ToString을 구현했는지 알 수있는 방법이 있습니까?

그래서 누군가가 나를 반영하는 데 도움이 될 수있는 경우 중 하나를 알아낼 수있는 속성에 구현 된 기본 메서드가 아니거나 GetValue를 사용하여 컬렉션을 검색하는 적절한 방법을 가리키는 찾고 있어요 속성 나는 그것을 감사하겠습니다.

J

답변

10

는 방법과 같이 기본 .ToString() 체크 MethodInfo.DeclaringType를 오버라이드 (override) 여부를 확인하려면 다음

void Main() 
{ 
    Console.WriteLine(typeof(MyClass).GetMethod("ToString").DeclaringType != typeof(object)); 
    Console.WriteLine(typeof(MyOtherClass).GetMethod("ToString").DeclaringType != typeof(object)); 
} 

class MyClass 
{ 
    public override string ToString() { return ""; } 
} 

class MyOtherClass { 
} 

인쇄를 :

True 
False 
+0

BindingFlags.DeclaredOnly 당신이 직접 테스트 할 수 있습니다 사용. –

+2

그러나 object가 아닌 기본 클래스에서 상속 된 override가있을 수 있습니다. – phoog

+0

오른쪽. 따라서 Hans Passant의 제안에 따르면 객체의 런타임 유형에 의해 선언 된 우선 순위 만 찾으면됩니다. – phoog

관련 문제