2011-01-14 5 views
3

두 개 또는 세 개의 깊이와 같은 개체 속성을 드릴 스루하는 기능을 만들어야합니다. 예를 들어, 클래스 A는 클래스 B에 대한 속성 참조를 가지고 있는데, 클래스 C에 액세스해야합니다. 이것을 수행하는 가장 좋은 방법은 무엇입니까 : 직선 반향 또는 TypeDescriptor 또는 다른 것을 사용하고 있습니까?.NET에서의 심층 반사

감사합니다.

+0

은 (는) 공중파입니까? – Simon

+2

더 자세한 정보를 얻을 수 있습니까? 어떤 종류의 사용이나 샘플 코드? 나는 Reflection을 통해 모든 종류의 일을 해왔으며, 여전히 당신이하려는 것을 이해하고 있는지 확신 할 수 없다. – jcolebrand

+0

@Simon 예, 공개. @drachenstern 나는 기본적으로 @ 사이먼이 그의 포스트에서하고있는 것을하려고 노력하고있다. –

답변

1

쓰기가 너무 어렵지 않습니다. WinForm의 속성을 직렬화 할 수 있도록 몇 가지 클래스를 함께 처리했습니다. 이 클래스와 관련 클래스를 살펴보십시오. 정적 컨텍스트에서 경로를 알고있는 경우

http://csharptest.net/browse/src/Library/Reflection/PropertySerializer.cs

+0

감사합니다. 나는 그것을 검사 할 것이다. –

1

당신은 내가 당신을 동적

[Test] 
    public void Foo() 
    { 
     var a = new A 
     { 
      B = new B 
      { 
       C = new C 
       { 
        Name = "hello" 
       } 
      } 
     }; 


     DoReflection(a); 
    } 

    private void DoReflection(dynamic value) 
    { 
     string message = value.B.C.Name; 
     Debug.WriteLine(message); 
    } 
+0

나는 중앙 집중식 프로세스를 만들고 있으므로 속성이 무엇인지 모른 채이를 수행 할 수 있어야합니다. 좋은 생각이야. –

0

을 사용할 수 있습니다 (경로는 항상 동일 예)와 속성에 액세스 (내부 또는 공용)입니다 어떤 이유로 든 직렬화 코드를 작성하고 싶다면 리플렉션을 사용할 것입니다.

당신이하는 일은 유형을 직렬화하는 재귀 적 방법을 작성하는 것입니다. 그런 다음 결과를 얻으려는대로이 방법을 적용합니다. 이 시퀀스가 ​​발생하는 경우 또는

var type = myObjectOfSomeType.GetType(); 
// now depending on what you want to store 
// I'll save all public properties 
var properties = type.GetProperties(); // get all public properties 
foreach(var p in properties) 
{ 
    var value = p.GetValue(myObjectOfSomeType, null); 
    Writevalue(p.Name, value); 
} 
WriteValue의 구현은 종류의 내장을 인식하고 적절하게 치료해야

, 그 등 문자열, 문자, 정수, 더블, 날짜 시간

  • 같은 일반적인 것들입니다 당신이 많은 가치를 쓸 필요가 컬렉션.
  • 사소한 유형이 아닌 경우이 재귀 패턴을 다시 적용합니다.

최종 결과는 개체 모델을 탐색하고 직렬화 방법을 알고있는 형식을 발견 할 때 값을 기록하는 재귀 알고리즘입니다.

그러나 건물 서비스가 아니라 직렬화를 고려하여 WCF를 조사하는 것이 좋습니다. System.Runtime.Serilization이라는 새로운 어셈블리로 .NET 3.0 프레임 워크의 일부로 제공되었으며 일반적으로 직렬화 및 데이터 주석을 처리 할 때 매우 유용합니다.