두 개 또는 세 개의 깊이와 같은 개체 속성을 드릴 스루하는 기능을 만들어야합니다. 예를 들어, 클래스 A는 클래스 B에 대한 속성 참조를 가지고 있는데, 클래스 C에 액세스해야합니다. 이것을 수행하는 가장 좋은 방법은 무엇입니까 : 직선 반향 또는 TypeDescriptor 또는 다른 것을 사용하고 있습니까?.NET에서의 심층 반사
감사합니다.
두 개 또는 세 개의 깊이와 같은 개체 속성을 드릴 스루하는 기능을 만들어야합니다. 예를 들어, 클래스 A는 클래스 B에 대한 속성 참조를 가지고 있는데, 클래스 C에 액세스해야합니다. 이것을 수행하는 가장 좋은 방법은 무엇입니까 : 직선 반향 또는 TypeDescriptor 또는 다른 것을 사용하고 있습니까?.NET에서의 심층 반사
감사합니다.
쓰기가 너무 어렵지 않습니다. WinForm의 속성을 직렬화 할 수 있도록 몇 가지 클래스를 함께 처리했습니다. 이 클래스와 관련 클래스를 살펴보십시오. 정적 컨텍스트에서 경로를 알고있는 경우
http://csharptest.net/browse/src/Library/Reflection/PropertySerializer.cs
감사합니다. 나는 그것을 검사 할 것이다. –
당신은 내가 당신을 동적
[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);
}
나는 중앙 집중식 프로세스를 만들고 있으므로 속성이 무엇인지 모른 채이를 수행 할 수 있어야합니다. 좋은 생각이야. –
을 사용할 수 있습니다 (경로는 항상 동일 예)와 속성에 액세스 (내부 또는 공용)입니다 어떤 이유로 든 직렬화 코드를 작성하고 싶다면 리플렉션을 사용할 것입니다.
당신이하는 일은 유형을 직렬화하는 재귀 적 방법을 작성하는 것입니다. 그런 다음 결과를 얻으려는대로이 방법을 적용합니다. 이 시퀀스가 발생하는 경우 또는
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 프레임 워크의 일부로 제공되었으며 일반적으로 직렬화 및 데이터 주석을 처리 할 때 매우 유용합니다.
은 (는) 공중파입니까? – Simon
더 자세한 정보를 얻을 수 있습니까? 어떤 종류의 사용이나 샘플 코드? 나는 Reflection을 통해 모든 종류의 일을 해왔으며, 여전히 당신이하려는 것을 이해하고 있는지 확신 할 수 없다. – jcolebrand
@Simon 예, 공개. @drachenstern 나는 기본적으로 @ 사이먼이 그의 포스트에서하고있는 것을하려고 노력하고있다. –