关于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求助的!!!