gpt4 book ai didi

c# - 如何获取对象的基础对象(不仅仅是 BaseType)

转载 作者:太空宇宙 更新时间:2023-11-03 17:53:43 25 4
gpt4 key购买 nike

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

有些类是这样继承的:

MessageBase --> ValueMessage --> DoubleValueMessage

其他类似的:

MessageBase --> ValueMessage --> [some class] --> [some other class] --> TestMessage

我需要的是:我有这些继承类之一的对象,比方说 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;
}

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

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

我怎样才能得到它?预先感谢您的帮助!

最佳答案

基础对象不是一个单独的对象。派生对象基础对象。您可以像访问派生类的属性一样访问基属性,除非属性是私有(private)的。如果您想要基类的实例,则转换对象,例如

var baseInstance = obj as MessageBase;

...但听起来您实际上并不需要这样做。

关于c# - 如何获取对象的基础对象(不仅仅是 BaseType),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17401847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com