有人要求我提供更多信息:下面是原始问题:
我看到了上面指向的答案。在发布之前,我确实进行了搜索。这就是我发现 .IsSubclassOf
的方式(我对 C#
非常陌生)。
我不明白为什么在尝试使用该命令时会出现错误。
我需要能够判断某个对象 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派生的对象,无论它是几个现有子类型之一还是可能出现的新子类型。
st
已经是对Type
对象的引用,你期望typeof(st)
做什么?我相信你想做的事情是可行的 - 我们只需要正确理解它。(特别是,为什么你想以不同的方式处理ListBox的不同子类?) - Jon Skeettypeof(st)
不正确,st
已经是一个类型了,您只需使用:st.IsSubClassOf(uType)
。 - Maarten