通过反射获取接口属性

时间:2013-08-24 13:44:20

标签: c# reflection interface

我正在广泛使用foovar.GetType().GetProperty("PropertyName").GetValue(foovar)通过反射获取变量的属性值。但它似乎不适用于接口类型。

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

我正在使用第三方程序集,因此我无权访问该实现。有一个'Name'属性,我可以获得价值。但不能通过反思。

当我尝试string s = (string)foo.GetType().GetProperty("Name").GetValue(foo);时,我收到一个空错误:没有'名字'属性

我检查了PropertyInfo[] pi = foo.GetType().GetProperties();,我可以看到大约200个属性,其中没有一个属于“名称”。事实上,很多其他的“智能感知属性”都不会出现。

¿如何检索接口类型属性的值?

谢谢!

1 个答案:

答案 0 :(得分:2)

返回的对象可以显式实现IFoo,因此Name属性将是私有的。 您可以改用接口类型:

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

编辑:如果这不起作用,那么我只能假设该属性实际上是在IFoo实现的其他接口上定义的。

public interface IBase
{
    string Name { get; }
}

public interface IFoo : IBase
{
}

在这种情况下,您需要找到声明Name的实际界面并使用它。