如何判断一个对象是否派生自特定的类

本文关键字:派生 是否 一个对象 何判断 判断 | 更新日期: 2023-09-27 18:22:20

有人问我更多信息:最初的问题在下面

我看到了上面提到的答案。发帖前我确实看过。这就是我如何找到我不知道存在的.IsSubclassOf(我对C#很陌生)。

我不明白的是,当我尝试使用该命令时,为什么会出现错误。

我需要能够判断某个对象O是否是其他类C的子类。如果我直接指定类C的类型(例如ListBox)也可以,但O是什么类会有所不同,这就是我需要检查的原因。O可能是从ListBox派生的许多对象中的一个,也可能是从TextBox派生的对象,或者可能是其他对象。我需要能够处理那些方法被传递对象的情况,这些对象是从ListBox派生的或ListBox的子类,或者任何O类可能是或可能不是从派生的/子类

如果"st"可以在最后一条语句中起作用,我下面给出的例子会很好地。但它不起作用。这给了我一个错误。有人告诉我,我不能在那里使用变量——我必须使用类型。但变量是一种类型。我将其声明为上面的类型。我无法具体命名该类型,因为我不知道对象的类型。我必须用GetType拿到它。


原始问题/帖子:

我需要能够判断对象的实例是否派生自特定的类。

这只是一些测试type of"is a IsSubclassOf"方法的示例代码,但它们似乎对我不起作用

ListBox tb = new ListBox();
NoVerticalScrollCheckedListBox nvlb = new NoVerticalScrollCheckedListBox();
Type st = nvlb.GetType();
Type uType = tb.GetType();
bool b = typeof(st).IsSubclassOf(uType);
Console.Write("BOOL: " + b); 

我得到一个错误,我试图使用变量st作为类型,但st是一个类型。我可以输入实际的类名,如"NoVerticalScrollCheckedListBox",但这不会给我想要的信息,因为我希望能够发现的是一个特定的对象实例是否派生自另一个类,而不是该类是否抽象地派生自该其他类。

例如,我想制作一个方法,以特定的方式处理从ListBox派生的所有对象,无论它是几个现有子类型中的一个还是可能出现的新子类型。

如何判断一个对象是否派生自特定的类

对常见任务使用反射是一个很好的指标,表明有更好的方法。有希望的第一步似乎是:

bool b = nvlb is ListBox;

不过,根据您使用这些信息的方式,即使这样也可能没有必要。你应该更详细地描述你的方法的目的。

您不能传递正在比较的类型的实例。

public class Base{}    
public class Child : Base{}
public class ChildOfChild : Child{}
public class Another{}
//...
bool b1 = typeof(Child).IsSubclassOf(typeof(Base)); //true
bool b2 = typeof(ChildOfChild).IsSubclassOf(typeof(Base)); //true
bool b3 = typeof(Another).IsSubclassOf(typeof(Base)); //false

如果要检查当前实例,可以使用作为,而不是

Child c = new Child();
//...
Base b = c as Base;
if(b != null)
{
    //...
}