2013-08-24 2 views
2

foovar.GetType().GetProperty("PropertyName").GetValue(foovar)을 광범위하게 사용하여 리플렉션을 통해 변수 변수의 속성 값을 가져옵니다. 하지만 인터페이스 유형에서는 작동하지 않습니다.리플렉션을 통해 인터페이스 속성 가져 오기

IFoo foo = GetFoo(); 
string fooName= foo.Name; //It works perfectly 

구현에 액세스 할 수 없도록 제 3 자 어셈블리를 사용 중입니다. 'Name'속성이 있으며 값을 얻을 수 있습니다. 그러나 성찰을 통해서는 불가능합니다. 내가 string s = (string)foo.GetType().GetProperty("Name").GetValue(foo);을하려고하면

는 내가 널 오류가 발생합니다 :이 중 어느 것도 "이름"입니다, 거기에 내가 PropertyInfo[] pi = foo.GetType().GetProperties(); 확인했다

에는 '이름'속성이 없으며 나는 약 200 속성을 볼 수 있습니다. 사실 많은 다른 '인텔리 센스 특성'이 나타나지 않습니다.

인터페이스 유형의 속성 값을 다시 검색하려면 어떻게해야합니까?

감사합니다.

+0

왜 이것을 반영해야합니까? ILSpy, dotPeek 또는 Reflector로 imlementation을 보려고 했습니까? –

+0

런타임에 액세스해야하는 속성이 있습니다. 그것에는 많은 종류가 있습니다. 데이터베이스 나 XML을 통해 매번 사용할 속성 이름과 속성 유형을 얻은 다음 반사 및 제네릭을 사용하여 vaule을 가져옵니다. – Kaikus

답변

2

반환되는 개체는 IFoo을 명시 적으로 구현할 수 있으므로 Name 속성은 비공개가됩니다. 대신 인터페이스 유형을 사용할 수 있습니다

object property = typeof(IFoo).GetProperty("Name").GetValue(foo); 

편집 : 문제가 해결되지 않으면, 난 단지 재산이 실제로 어떤 IFoo 구현 예를 들어, 다른 인터페이스에 정의 된 가정 할 수 있습니다

public interface IBase 
{ 
    string Name { get; } 
} 

public interface IFoo : IBase 
{ 
} 

이 경우 Name을 선언하고이를 사용하는 실제 인터페이스를 찾아야합니다.

+0

죄송합니다. 오류가 계속 발생합니다. 사실, 'typeof (IFoo) .GetProperties()'를 시도 할 때 'foo.GetType(). Getproperties()'와 동일한 속성을 사용하고 있습니다. – Kaikus

+0

@Kaikus - 응답을 업데이트했습니다. 도움? – Lee

+0

감사합니다. Followoo 당신의 아이디어, 편집장에서, 'intellisense', 나는 IFoo에서 propery가 'string IBase.Name'으로 정의 된 것을 볼 수 있습니다. 그래서 솔루션 is'string s = (string) typeof (IBase) .GetProperty ("Name"). GetValue (foo); ' 'foo'가 IFoo로 정의 된 경우에도 마찬가지입니다. :) 그런데, 당신은 코드를 통해 (이름은 사실 IBase.Name입니다) 얻을 수 있도록 그 underliying 구현에 대한 인터페이스를 쿼리하는 방법을 알고 계십니까? – Kaikus

관련 문제