日期:2014-05-20  浏览次数:21002 次

关于C#中的基类到子类的类型转换
public   class   baseclass
        {
                public   string   str;
                public   baseclass(string   str)
                {
                        this.str   =   str;
                }
                public   virtual   void   dis()
                {
                        Console.WriteLine(str+ "调用基类的dis函数 ");
                }
        }
        public   class   deriveclass   :   baseclass
        {
                public   string   str2;
                public   override   void   dis()
                {
                        Console.WriteLine(str2+ "调用子类的dis函数 ");
                }
                public   deriveclass(string   str2):base( "子类调用基类的构造函数 ")
                {
                        this.str2   =   str2;
                }
        }
static   void   Main(string[]   args)
                {
                        baseclass   obj   =   new   baseclass( "构造基类对象 ");
                        obj.dis();
                        deriveclass   obj2   =   new   deriveclass( "构造子类对象 ");
                        obj2.dis();

                        obj2   =   (deriveclass)obj
                        obj2.dis();;//此处是我认为出错的地方

                        obj   =   obj2;
                        obj.dis();

                        obj2   =   (deriveclass)obj;
                        obj2.dis();
                }
/*上面是我写的验证C#中,从上到下的类型转换问题。
我的疑惑是:将基类对象强制转换为子类类型此过程理应不会出错
为什么那个obj2.dis()调用就出错了呢,难道它是因为obj2是子类型
它就会先去调用基类的版本,发现基类中此函数为虚,再到派生类中找?
*/

**********烦请大侠把这个问题讲得透彻一点,最好结合C++
**********还有C++严禁基类到子类的转换,而C#中允许,是吗?意义?

确实是身边没有合适的人来解答我的问题,特向CSDN求助的!!!