我有几个派生类都来自同一个基类。从基类集合中检查派生类的类型
class Base {}
class ClassOne : Base {}
class ClassTwo : Base {}
class ClassThree : Base {}
说我有这些类对象的数组,我需要移动这个数组并根据派生类类型执行特定的操作。
Base[] objects;
foreach(Base entry in objects){
//Check for class type to perform operations
}
我已经看过几种方法来处理这个问题。起初我曾尝试过抓住方块,然后试图将抓到的无效物体施放,然后再次施放。这似乎很混乱,所以我试图做一个检查。
if(entry.GetType() == ClassOne){}
else if(entry.GetType() == ClassTwo){}
但是这不起作用,因为它们都被认为是代码中该实例的基类型。
我现在所做的解决此问题的方法是在所有派生类类型中添加枚举,并在创建对象时将其设置在构造函数中。
public enum DerivedClassType{
Base,
One,
Two,
Three
}
现在我的foreach有一个开关,可以在试图施放之前检查该类型。
Base[] objects;
foreach(Base entry in objects){
switch(entry.derivedClassType){
case DerivedClassType.One:
((One)entry).DoOneStuff();
break;
case DerivedClassType.Two:
break;
case DerivedClassType.Three:
break;
}
}
通过所有这些步骤会后,我想知道处理这类问题的正确方法是什么,因为这一切似乎更令人费解比它也许应该。
由于
_“执行特定的操作取决于派生类类型” _ - 那么你使用继承错误。请尝试非常明确地解释(而不是使用名为base,one,two和three的人为示例,但使用您的实际代码)为什么您认为您需要这样做。总的来说,事实证明你完全不需要这个,并且对它的需求将会消失。 – CodeCaster
在每个这些类中添加一个overide方法,并使该方法执行不同的任务。所以这将是entry.method() – Dheeraj
你试过如果(entry.GetType()== typeof(ClassOne))'或'如果(条目是ClassOne)'? –