关于继承:如何在C#中从基类中按名称获取派生类成员?

How to get derived class MEMBERS by name, from base class, in C#?

本问题已经有最佳答案,请猛点这里访问。

我有基类commonclass-abstract父类。从中我有许多派生类,它们都只有相同类型objdescr的新成员。一个简短的例子

1
2
3
4
5
6
7
8
9
10
11
public class CommonClass
{
    // many common methods, handlers and properties
}

// many derived classes like this one
public class Orders : CommonClass
{
    public ObjDescr Date  { get; private set }
    public ObjDescr Place  { get; private set }
}

CommonClass很好地为我服务,但是现在我想做一个通用的方法,我可以向它发送任何不同的派生子类。它将迭代一些新的派生成员,知道成员名。

1
2
3
4
5
6
7
8
9
10
public SuperDuperUniversal( CommonClass UnknownDerived, string memb_name )
{
    // I do access to members now only WHEN i know the class
    Orders Order1 = (Orders)UnknownDerived;
    ObjDescr aPlace1 = Orders.Place;

    // I wanna to have access like
    ObjDescr aPlace2 = UnknownDerived.Get_ObjDescr_ByName(memb_name);
    string aPlaceName = aPlace2.Description;
}

我需要直接访问名为memb_name instance unknownderived的成员。

编辑:我不同意这个问题与其他问题重复。我同意,解决办法是一样的。但问题是不同的。在我问之前,我在谷歌上搜索了一下,却没有找到答案。如果有人想从名称中获取实例的类成员来找到这个答案,这将非常方便。


使用反射,您可以访问该属性:

1
2
3
4
5
6
public void SuperDuperUniversal(CommonClass unknownDerived, string memb_name)
{
    var member = unknownDerived.GetType().GetProperty(memb_name).GetValue(unknownDerived, null) as ObjDescr;

    string desc = member.Description;
}