class A
{
public void SayHello()
{
Console.WriteLine("Hello, I'm {0}.", this.GetType().ToString());
}
static void Main()
{
ArrayList list = new ArrayList();
list.Add(new A());
list.Add(new B());
list.Add(new C());
list.Add(null);
list.Add(new D());
foreach (object obj in list)
{
//判断是否为A的子类
// bool isA = (obj == null ? false : ((obj.GetType()).IsSubclassOf(list[0].GetType())));
bool isA = (obj is A)&&(typeof(A)!=obj.GetType());
// bool isA = (obj == null ? false : ((obj.GetType()).IsInstanceOfType(list[0])));
// Type.IsInstanceOfType 确定指定的对象是否是当前 Type 的实例。
if (isA)
{
A a = (A)obj;
a.SayHello();
}
}
}
}
class B : A { }
class C : B { }
class D { }
用IsInstanceOf的结果:
Hello, I'm ConsoleApplication1.A.