如何判断一个对象是否来自特定类

时间:2015-11-17 06:56:57

标签: c# subclass typeof

我被问到了更多信息:原始问题在

之下

我看到了上面提到的答案。在发布之前我确实看过。这就是我发现.IsSubclassOf我不知道存在的方式(我对C#非常陌生)。

我不明白为什么在尝试使用该命令时出现错误的原因。

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

派生/子类

我在下面给出的示例可以正常工作 如果 “st”可以在最后一个语句中工作。但它不起作用。它给了我一个错误。我被告知我不能在那里使用变量 - 我必须使用Type。但变量是一种类型。我将其声明为上述类型。我不能具体说明类型,因为我不知道对象的类型。我必须使用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派生的所有对象,无论它是几个现有子类型之一还是可能来自的新子类型沿。

2 个答案:

答案 0 :(得分:5)

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

bool b = nvlb is ListBox;

根据您使用此信息的方式,即使这可能也不是必需的。您应该更详细地描述方法的目的。

答案 1 :(得分:0)

您无法传递您要比较的类型的实例。

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)
{
    //...
}