繁体   English   中英

我怎么知道一个对象是否来自特定的类

[英]How can I tell if one object is derived from a particular class

我被要求提供更多信息:原始问题如下

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

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

我需要能够判断某个对象O是否是其他某些类C的子类。如果我直接指定C类的类型(例如ListBox )是可以的,但是O是什么类会有所不同,即为什么我需要检查。 O可能是从ListBox派生的许多对象之一,也可能是从TextBox派生的对象,也可能是其他对象。 我需要能够处理那些正在传递方法的情况,这些方法是从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

如果要检查当前实例,可以使用as代替is

Child c = new Child();
//...

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM