先看代码(很简单的):
             class baseclass
    {
public int a;
public int b;
public virtual void  inc()
                           {
a = -a;
b = -b;
Console.WriteLine("Call base::inc()");
Console.WriteLine();
}
public baseclass()
{
a = 0;
b = 0;
Console.WriteLine("Call base().");
Console.WriteLine();
}
public baseclass(int va , int vb)
{
a = va;
b = vb;
Console.WriteLine("Call base(int va , int vb).");
Console.WriteLine();

public int add()
{
inc();
Console.WriteLine("Call base:add(int va , int vb).");

return a + b;
}
} class sub:baseclass
{
public override void  inc()
{
a ++;
b ++;
Console.WriteLine("Call SUB::inc()");
Console.WriteLine();
}
public sub():base()
{
Console.WriteLine("Call SUB()");
Console.WriteLine();
}
public sub(int va , int vb):base(va , vb)
{
Console.WriteLine("Call SUB(va , vb)");
Console.WriteLine(); }
}sub继承自baseclass
public class test
{
public static void Main()
{
int ret;

baseclass base1;
sub sub2 = new sub(1, 1);
base1 = (baseclass)sub2;//在此进行了显式类型转换
ret = base1.add();//还是调用add方法还是调用sub:inc()
if(base1 is sub)//测试条件为true
{
Console.WriteLine("base1 is sub");
Console.WriteLine("ret = {0}" , ret);
Console.WriteLine();
}
}
}
我想问为何进行了显式类型转换,ret = base1.add();还是调用sub:inc(),(base1 is sub)为True?
有没有方法把派生类对象完完全全转换成基类对象?

解决方案 »

  1.   

    派生类对象完完全全转换成基类对象
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~class Base
    {}class ChildClass : Base
    {}
    Base b = (Base)(new ChildBase());
      

  2.   

    纠正楼上的笔误
    class Base
    {}class ChildClass : Base
    {}
    Base b = (Base)(new ChildClass());
      

  3.   

    没用的,
    我这样添加代码
    baseclass base2 = (baseclass)(new sub(1,1));
    ret = base2.add();
    if(base2 is sub)
    {
          Console.WriteLine("base2 is sub");
          Console.WriteLine("ret = {0}" , ret);
          Console.WriteLine();}base2 is sub 还是true,并且base2.add()还是调用sub:inc()都挂了一整天了,还是没人回答,是不是嫌太简单不愿意回答啊?