2010-06-08 3 views
0

클래스의 인스턴스가 주어지면 런타임에 속성에 속성을 설정하려고합니다.클래스 인스턴스의 속성에서 속성 찾기

그래서이 방법을 시도했지만 클래스에서 인스턴스가 아니라 속성을 찾았으므로 속성 속성을 변경하면 아무 효과가 없습니다.

var properties = myObject.GetType().GetProperties(); 

foreach (object prop in properties) 
{ 
    var attribute =prop.GetCustomAttributes(typeof(MyAttribute), true)[0]; 
    //attribute.MyProp do some stuff 
} 

아래와 같이 유형 설명자를 사용하려고하면 속성의 속성을 가져올 수 없습니다.

var myObject= (MyClass) object; 
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(myObject); 

//There is no props[0].GetCustomAttributes(
+1

이것은 작동하지 않습니다. 속성은 변경 가능해야합니다. – SLaks

+0

속성은 해당 코드 요소의 런타임 표현이 아니라 코드 요소와 연관됩니다. (btw, TypeDescriptor GetAttributes 메서드가 있지만 여전히 인스턴스가 아닌 형식을 기반으로) – SWeko

답변

2

속성은 Type이 아닌 Type 또는 Type의 멤버에 적용되는 메타 데이터입니다. 특정 클래스 인스턴스에 값을 적용하는 경우 속성/필드 사용을 고려하지 않아야합니까?

+0

사실 속성을 매개 변수로만 컴파일 시간을 가져옵니다. 그래서 일부는 동적으로 제공해야합니다. 값. – Dan

+0

필요한 경우 속성의 인스턴스를 사용할 수 있습니다. 단, 해당 속성을 사용하는 경우에만 가능합니다. 여러분이 물어볼 질문은, 런타임 값을 적용하기 위해 애트리뷰트의 인스턴스를 얻으려는 모든 노력, 애트리뷰트가되는 용도는 무엇입니까? –

관련 문제