interface IMyInterFace
        { 
        }        class ClassA : IMyInterFace
        { 
        }        class ClassD : ClassA
        { 
        }        static void Main(string[] args)
        {
            ClassA ca = new ClassA();
            ClassD cd = (ClassD)ca;
        }转换会出错,什么原因呢?

解决方案 »

  1.   

    基类不能转换为派生类class 水果
    {
    }
    class 苹果:水果
    {
    }static void Main(string[] args)
            {
                水果 a= new 水果();
                苹果 c = (苹果)水果;//水果不一定是苹果
            }
      

  2.   

    class d 的范围比 class a大不能转 
      

  3.   

    继承的一个结果是派生于基类的类在方法和属性上有一定的重叠,因此,可以使用相同的语法处理从同一个基类实例化的对象。例如,如果基类Animal有一个方法EatFood(),则从派生于它的类Cow和Chicken中调用这个方法,其语法类似的:
    Cow myCow = new Cow();
    Chicken myChicken = new Chicken();
    myCow.EatFood();
    myChicken.EatFood();
    多态性则更推进了一步,可以把某个基本类型的变量赋予其他派生类型的变量,例如:
    Animal myAnimal = myCow;
    不需要进行强制类型转换,就可以通过这个变量调用基类的方法:
    myAnimal.Moo();
    但是,可以把基本类型的变量转换为派生类变量,调用派生类的方法,如下所示:
    Cow myNewCow = (Cow)myAnimal;
    这里不是吗?怎么不能啊?
      

  4.   

    ClassA ca = new ClassD);
    ClassD cd = (ClassD)ca;你那段话的意思是这样
      

  5.   

    Cow myCow = new Cow();
    //...
    Animal myAnimal = myCow;  // Cow
    //...
    Cow myNewCow = (Cow)myAnimal;如果原始变量myAnimal的类型不时Cow或派生于Cow的类型,这个强制类型转换就会产生异常!
      

  6.   

    一句话就说清了...派生类可以隐式转换为基类,而基类不能直接转换为派生类...你可以看看这个帖子就明白了...
    http://topic.csdn.net/u/20090206/22/6cbdf89f-a75f-434f-bca3-2dd872f92dee.html
      

  7.   

    class A;
    class B : A;
    class C : B;原始类型
    A a = new B();
    C c = (C)a;这样是可以吧?A a = new A();原始类型不是?这样不行?
    C c = (C)a;