class BaseObj
{
       public virtual int Delete() {    return 0; }
}class AObj:BaseObj
{
public override int Delete() {  return 20;       }
}
class BObj:AObj
{
new public int Delete() {      return 40; }
}
class A
{     
static void Main()
{
       BaseObj c1= new BObj();       Int x = cl.Delete();}
X的值运行后为20,请问过程是怎样得出来的?这里用派生累构造函数实例化一个基类的对象得出来的Cl是怎样的一个对象?
还有new public int Delete() {      return 40; }这里的new是起显式隐藏或者说修改其基类当中对Delete()函数
的声明的作用吗?
请给位指点指点,小弟是个初学者,如果问的问题太低级还请包涵!!

解决方案 »

  1.   

    可能说的不是很清楚,就想了解一下BaseObj c1= new BObj(); 的含义是什么?
      

  2.   

     父类对象指向子类的引用,就是你用new 子类的对象得到的是父类对象,调用的还是父类的方法
      

  3.   

    如果父类的该方法是virtual的,并且在子类中override了,那么调用的是子类的方法,即传说中的多态。
    楼主这里很可以没有override,所以调用的仍然是父类的方法AObj.delete()
      

  4.   

    既然得到的还是父类对象,那这样做有啥作用呢?
    比如和我直接用BaseObj c1= new BaseObj()这样得到的实例有什么差别?
      

  5.   

    你在这个例子用的时候 BaseObj c1= new BObj(); 和BObj c1= new BObj();没多大区别
    不过当你在方法中有个参数为  BaseObj 类型而非BObj 类型时,这个方法的灵活性是很高的
    传参的时候既能传BaseObj 也能传BObj 还能传AObj 即BaseObj 的子类