반사 코드를 약간 수정 해보십시오. 우선, 객체와 특별히 사용자가 원하는 property
을 모두 참조해야합니다. Property
은 Field
과 같지 않습니다.
MyObject.GetType().GetProperty("Enabled").SetValue(MyObject, bEnabled, null);
는 MyObject
무엇이든의 유형을 사용하여 버튼이나 형태 또는 무엇이든은 ... 다음, 이름 Enabled
하여 속성을 참조 후 다시 MyObject
에 대한 그것을 설정하는 것이합니다.
인스턴스를 직접 가져 오기 전에 인스턴스를 변수에 저장할 수 있지만 속성이 필드가 아니라는 것을 다시 기억하십시오.
PropertyInfo[] piSet = MyObject.GetType().GetProperties();
당신은 속성 집합을 얻을 수 this
를 사용할 수 있지만 this
당신이 활성화/비활성화하려는 컨트롤과 같은 Type
아닌 경우는하지 않는 것이 좋습니다.
추가 편집
나는 그것을 밖으로이있어 질문을 다시 읽은 후 : 당신이 원하는 것 같습니다 것은 다층 반사와 제네릭입니다. 찾고있는 컨트롤은 "this"에 연결된 필드입니다. 당신이 할 수있는 일은이 선을 따라 무엇인가입니다.
Type theType = this.GetType();
FieldInfo[] fi = theType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo f in fi)
{
//Do your own object identity check
//if (f is what im looking for)
{
Control c = f.GetValue(this) as Control;
c.Enabled = bEnabled;
}
//Note: both sets of code do the same thing
//OR you could use pure reflection
{
f.GetValue(this).GetType().GetProperty("Enabled").SetValue(f.GetValue(this), bEnabled, null);
}
}
인스턴스가'this' 우리가 할당 할 값하는 데 도움이 (이 경우, 아마도 부울 ...)
희망 ...입니다. 클래스의 인스턴스에서 Type을 가져옵니다. –
존재하지 않는 것의'Enabled' 속성을 변경하는 것은 의미가 없습니다. 당신이하려는 일과 이유에 대해 자세히 설명해 줄 수 있습니까? – Bobson
@PaulSasik을 되풀이해서보고있는 유형이 'this' 인스턴스의 유형이라면 인스턴스는'this'가 될 것입니다 –