我正在尝试使用Reflection来调用对象实例内部的类变量中的函数。
我有一个与此定义类似的类:
public abstract class Foo : IDisposable
{
public Bar c { get; }
<...snip...>
}
Bar是一个密封的类,但我认为这与我的问题无关。在非反射情况下,使用此类如下所示:
Foo myFoo = someOtherObject.GetFoo();
myFoo.c.someFunc();
我需要使用反射来做同样的事情,但是无法访问构造的Foo对象内部的c变量。
我已经确认我的myFoo对象是使用反射函数调用正确构造的,但是我无法访问实例变量。其他主题建议做myFoo.GetType().GetFields()
,然后遍历字段以获得我想要的内容,但是GetFields()
在两种情况下都不会返回任何结果(反射或否),因此我不确定问题是否有将其定义为抽象或其他内容。
我还有另一种获取类变量的方法吗?
答案 0 :(得分:1)
什么也不返回的原因是c
不是字段,而是属性。为了简化起见,C#中的属性是用{ get {} set {} }
语法表示的getter和setter方法,该方法原本应该是一个字段(您认为该字段将在后面使用)。您可以在此处选择通过删除c
来使{ get; }
成为一个字段(通常不建议这样做,因为那样,使用您的类的任何代码都可以对该字段进行更改,而您的类无法对此做出反应)通过使用适当的方法来检索属性,即GetProperty()
。参见dialyxir。