关于获取类的实际类型的问题
public   abstract   class   A 
 { 
 	//....内容省略 
 }   
 public   class   B   :   A 
 { 
 	//....内容省略 
 }   
 public   class   C   :   A 
 { 
 	//....内容省略 
 }   
 public   abstract   class   D 
 { 
 	public   void   MethodTest(A   Ains) 
 	{ 
 		//....内容省略 
 	} 
 }   
 public   class   E   :   D 
 { 
 	//...内容省略 
 }   
 public   class   F   :   D 
 { 
 	//...内容省略 
 }   
 在上面提供的类中,B、C都是继承抽象类A,E、F继承抽象类D。现在的D中有个方法MethodTest,它的一个参数是抽象类A,我现在实例化类E(或者F),我调用MethodTest方法,传入的参数值可能是B或者是C的实例,现在的问题是,我在MethodTest方法内部,我怎么得到传入的参数值具体的类型(有可能是B,也有可能是C)
------解决方案--------------------if( Ains is B ) 
 if( Ains is C )
------解决方案--------------------ains.GetType().BaseType   
 不过这种在MethodTest需要依靠判断子类类型来执行的操作的设计不怎么好, 
 可能可以把这些不同的部分定义成A的方法放到ABC的类体系里面去做。
------解决方案--------------------to runrunrun(农妇、山泉、有点田) : 
 不能这样去遍历,因为上面的B、C类是不定的,在MethodTest方法体内我也许根本不知道B、C类是类 
 ======== 
 为什么这样处理不行? 
 这样就简单还最直接呢   
 public void MethodTest(A Ains) 
 { 
     if(Ains is B) { 
         Console.Write( "hello, i 'm B class "); 
         // ... 
     } 
     else if(Ains is C) { 
         Console.Write( "hello, i 'm C class "); 
         // ... 
     } else{ 
        throw new Exception( "in fact, this case should never occurs. "); 
     } 
 }
------解决方案--------------------Ains.GetType()
------解决方案--------------------public void MethodTest(A Ains) 
 { 
     if (a is B) 
     {} 
     else if (a is C) 
     {}   
     //或 
     if (a.GetType()==typeof(B)) 
     {} 
     else if (a.GetType() ==  typeof(C)) 
     {} 
 }
------解决方案--------------------lz想要知道传入的参数值具体的类型干嘛?
------解决方案--------------------GetType() 
 的确,对于一个好的设计来说,你根本不需在调用时知道具体是哪各子类,所有相关工作应该在子类中实现。