C#-通过反射从抽象类中的类变量调用函数

时间:2018-07-06 21:33:49

标签: c# reflection

我正在尝试使用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()在两种情况下都不会返回任何结果(反射或否),因此我不确定问题是否有将其定义为抽象或其他内容。

我还有另一种获取类变量的方法吗?

1 个答案:

答案 0 :(得分:1)

什么也不返回的原因是c不是字段,而是属性。为了简化起见,C#中的属性是用{ get {} set {} }语法表示的getter和setter方法,该方法原本应该是一个字段(您认为该字段将在后面使用)。您可以在此处选择通过删除c来使{ get; }成为一个字段(通常不建议这样做,因为那样,使用您的类的任何代码都可以对该字段进行更改,而您的类无法对此做出反应)通过使用适当的方法来检索属性,即GetProperty()。参见dialyxir