如何获取对象的基础对象(而不仅仅是BaseType)

Rob*_*ert 1 c# reflection inheritance object

我想知道如何获得对象的实际基础对象?我有一个名为MessageBase的基类,以及许多继承此基类的类,它们本身可以被不同深度的其他类继承.一个例子:

有些类继承如下:

MessageBase --> ValueMessage --> DoubleValueMessage
Run Code Online (Sandbox Code Playgroud)

其他人喜欢这样:

MessageBase --> ValueMessage --> [some class] --> [some other class] --> TestMessage
Run Code Online (Sandbox Code Playgroud)

我需要的是:我有一个这些继承类的对象,让我们说一个DoubleValueMessage的实例.我事先并不知道这个对象的类型,我所知道的是,有些是嵌套继承,有一个基础对象(MessageBase)我需要设置它的属性.

现在我试图获得对该基础对象的引用.所以试图获得DoubleValueMessage所基于的ValueMessage,但我不明白如何.

我这样试过:

public bool SetPropertyValue(object obj, string prop, object value)
{
    var item = obj.GetType().GetProperty(prop);
    //MessageBox.Show(obj.ToString());
    if (item != null)
    {
        item.SetValue(obj, value);
        return true;
    }
    else
    {
        if (obj.base != null)
        {
            SetPropertyValue(obj.base, prop, mb);
        }
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

我的想法是这样的:我传入一个对象(例如DoubleValueMessage类型),我想要设置的属性(基本对象,甚至是第一个属性?)和一个需要替换给定属性的对象,在我的case的MessageBase.所以我认为递归迭代继承层次结构直到找到我需要设置的属性是个好主意.

问题是:.base关键字似乎不是获取基础对象的正确方法.

我怎么才能得到它?在此先感谢您的帮助!

Ron*_*nie 8

基础对象不是单独的对象.派生对象基础对象.您可以只访问基本属性,就好像它们是派生类的属性一样,除非属性是私有的.如果你想要一个基类的实例,那么转换对象,例如

var baseInstance = obj as MessageBase;
Run Code Online (Sandbox Code Playgroud)

...但听起来并不像你真的需要这样做.