在类树中,比如A继承于B,B继承于C,...,H继承与G。请问C#中如何判断G是否是派生于E?

解决方案 »

  1.   

    生成一个G的对象g
    if (g is E)
    {
        //G类派生于E
    }
      

  2.   

    is 运算符用于检查对象的运行时类型是否与给定类型兼容。is 运算符用在以下形式的表达式中:
    expression is type
    其中: 
    expression 
    引用类型的表达式。 
    type 
    类型。 
    备注
    如果满足下列两个条件,则 is 表达式计算为 true 值: 
    expression 非 null。 
    expression 可以被转换为 type。也就是说,将完成形式 (type)(expression) 的转换表达式而不引发异常。有关更多信息,请参见 7.6.6 强制转换表达式。 
    如果已知 expression is type 表达式总是为 true 或总是为 false,则会发出编译时警告。
    不能重载 is 运算符。
    请注意,is 运算符只考虑引用转换、装箱转换和取消装箱转换。is 运算符不考虑其他转换(如用户定义的转换)。
    示例
    // cs_keyword_is.cs
    // The is operator
    using System;
    class Class1 
    {
    }class Class2 
    {
    }public class IsTest 
    {
       public static void Test (object o) 
       {
          Class1 a;
          Class2 b;      if (o is Class1) 
          {
             Console.WriteLine ("o is Class1");
             a = (Class1)o;
             // do something with a
          }
          
          else if (o is Class2) 
          {
             Console.WriteLine ("o is Class2");
             b = (Class2)o;
             // do something with b
          }
          
          else 
          {
             Console.WriteLine ("o is neither Class1 nor Class2.");
          }
       }
       public static void Main() 
       {
          Class1 c1 = new Class1();
          Class2 c2 = new Class2();
          Test (c1);
          Test (c2);
          Test ("a string");
       }
    }
    输出
    o is Class1
    o is Class2
    o is neither Class1 nor Class2.
      

  3.   

    稍微麻烦点
    if (typeof(System.Web.UI.Page).IsSubclassOf(typeof(Object)))
    {
        //
    }
      

  4.   

    Oh, that what I want, thank to  fancyf(凡瑞) .