2014-01-23 3 views
0

Reflection을 통해 값을 설정하려고하는 객체가 있습니다.리플렉션을 사용하여 보호 된 내부 인덱스가있는 클래스에서 값을 설정하십시오.

목적이 인덱서가 : 나는이 컬렉션에서 값을 설정하려는

protected internal object this[string propertyName] { get; set; } 

- 예를 들어, 인스턴스가 name 키가 포함되어있는 경우를, 내가 값을 설정합니다.

인덱서가 public 인 경우 myObj["Name"] = "foo"입니다. 내가 디버그 모드에서 나는 경우

흥미롭게도, 나는 myObj.Item["Name"]을 설정하고자하는 항목을 볼 수 있지만 코드 myObj.GetType().GetProperty("Item") 경우는 Null를 반환합니다.

리플렉션을 사용하여이 값을 어떻게 설정할 수 있습니까?

답변

0

리플렉션을 사용하여 내부 (또는 비공개) 속성을 얻으려면 올바른 BindingFlags을 제공해야합니다.

올바른 세트 등

  • BindingFlags.NonPublic
  • BindingFlags.Instance

을 (이에 한정되지 않음)된다.

var property = myObj.GetType().GetProperty("Item", BindingFlags.Instance | BindingFlags.NonPublic); 

이제 새 값을 추가하기 위해 세트를 호출 할 수 있습니다.

property.SetValue(myObj, "Foo", new object[] { "bar" }); 

는 사용자가 호출 할 수있는 인덱서에서 값을 얻으려면

myObj["Foo"] = "bar";를 호출 equivalant됩니다. Name 키 인덱스에 저장된 객체의 값을 반환합니다

var value = property.GetValue(myObj, new object[] { "Name" }); 

.

More on BindingFlags ON MSDN.

관련 문제