using System;
class Test
{
    static void Main()
    {
        class1 over = new class1();
        class2 df = new class2();
        Console.WriteLine(df.a);
        class2 go = over as class2;//为什么结果是Null
        class2 go2 = (class2)over;//Error        //目前我写了一个供调用的dll(采集)...现在我要将采集的内容存入到数据库....
        //所以继承采集内容的对象,然后多添加一些字段........
        //我调用采集的代码,返回给我一个对象...然后我将对象转换为派生类....结果就为Null了..........
        //请问怎么解决.....
        //郁闷的我都睡着了!!! 
    }
} class class1
{
     public int a;
     public class1()
     {
         a = 10;
    
    }
}class class2 : class1
{
    public class2()
    { 
    
    }
}

解决方案 »

  1.   

    基类当然不能转为继承类,反过来就可以:
    class1 go = df as class1;
    class1 go2 = (class1)df;
      

  2.   

    应该是class2可以转成class1,而不是class1转成class2。
      

  3.   

    as的工作原理应该要弄清楚
    as的最大好处是永远不会抛出异常(和is不一样)
    as执行前会测试转化结果,如果不能转化,返回null
      

  4.   

    over凭什么能转换成class2类型?
      

  5.   

    as转换是这样的,它用于引用类型之间的类型转换,如果转换失败它不会抛出异常,只会让结果为null;而()转换会抛出异常继承之间不用显示写()来转换直接写就可以了class2 c2=new class2();
    class2 c2_2=new class1();
    //
    class1 c1=new class1();
    class2 c2_3=c1;这样做的前提是class2是class1的基类即class class1:class2{}而你这样做但却把基类继承关系做反了
      

  6.   

    using System;
    class Test
    {
        static void Main()
        {
            class1 class1 = new class1();
            class2 class2 = class1;//Error////////////(class2)class1,编译OK,运行错误!!!
        }
    } class class1
    {
         public int a;
         public class1()
         {
             a = 10;
        
        }
    }class class2 : class1
    {
        public class2()
        { 
        
        }
    }
      

  7.   

    class1 class1 = new class1();
    class2 class2 = class1;-----------------
    class class2 : class1编译不过吧
      

  8.   

    class1是class2的父类,父类是不允许被转化为子类的,这在C#是不允许的,作者搞反了