如何在C#中从基类中按名称获取派生类成员?

时间:2015-02-06 09:27:44

标签: c# inheritance reflection

我有基类 CommonClass - 抽象父类。从它我有很多派生类,都只有相同类型的新不同成员 ObjDescr 。缩短的例子

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 很好地为我服务,但现在我想做一个通用的方法,我可以发送任何不同的派生子类。它将迭代一些新的派生成员,知道成员名称

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 实例 UnknownDerived 的成员。

编辑:我不同意这个问题与其他问题重复。解决方案是一样的,我同意。但问题不同。在我问之前,我用Google搜索并搜索,但未找到答案。它会很方便,如果其他人想从名字中获取实例的类成员来找到这个答案。

1 个答案:

答案 0 :(得分:3)

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

public void SuperDuperUniversal(CommonClass unknownDerived, string memb_name)
{
    var member = unknownDerived.GetType().GetProperty(memb_name).GetValue(unknownDerived, null) as ObjDescr;

    string desc = member.Description;
}