1、虚方法和抽象方法的区别?
2、如何区别覆盖和重载
3、显示实现接口和实现接口有什么区别?

解决方案 »

  1.   

    @lz:
    1.>虚方法是可以在派生类中进行重写,但本身又具有方法体的函数成员
       抽象方法只是提供了方法的签名,但不具有方法的实现.需要在派生类中进行覆写.
    2.>覆写上面已经提到了,简单描述一下重载,所谓重载简单来说就是方法的签名不同,比如参数的个数,类型等
    3.>实现接口,就是将从接口中的抽象方法进行实现.这里所指的实现就是使方法具有实际的执行行为.
       显示实现接口的目的可能是避免区分接口间方法的名称的冲突。
    建议lz动手实践一下,自然就明白了.
      

  2.   

    这个搞的再明白不如自己去写几个试试,
    好有 就是 
    楼上说的还有点补充就是:抽象方法的问题,抽象方法必须在抽象类里面,也必须要 abstract 修饰
    而且不同于接口的是: 接口都没有方法体 ,但是抽象类可以有!还有就是抽象类不可以被 static 修饰!
    其他的一时半会想不到了,最好去试试,别看死书~ 实践出真理的!
      

  3.   

    推荐!
    .NET 2.0面向对象编程揭秘(附光盘)
    http://product.dangdang.com/product.aspx?product_id=9338129&ref=search-0-A
      

  4.   

    入门的时候能提出这些问题很不错。当出学的时候也碰到过,《C#与.NET 3.5高级程序设计》
    很全,不想看MSDN的话,这个相当的全。里面就讲到这个问题了。现在好像出到 4.0了。
      

  5.   

    其他的我就不说了,就说一下显式实现接口吧.
    我这里拿Winform 下面的Control做例子,interface ICustomizedControl{
        void Refresh();
        void DisplayOn(Control container);
    }
    class ucLogin : Control,ICustomizedControl{
        //ICustomizedControl接口中独有的方法,必须实现.
        void DisplayOn(Control container){
        container.Controls.Add(this);
        }
        //1,Control基类中已经存在Refresh()方法.这里可以不实现,或者显式实现,或者重写实现.
        //virtual void Refresh(){}
        //2或者显式实现接口.
        ICustomizedControl.Refresh(){
            //...
        }
        //3,或者重写基类中同名方法.
        //void override Refresh(){...}
    }class Form1:Form{
        void LoadCustomizedControl(){
            ICustomizeControl ctr = new ucLogin();
            //这里如果显示实现了接口中的Refresh();
            //则实际调用的是 ICustomizeControl.Refresh();
            //否则调用的是Control.Refresh();
            //当然,如果重写了这个方法,不管怎样,调用的都将是重写后的方法.
            ctr.Refresh();
        }
            
      

  6.   

    成员函数被重载的特征有:1) 相同的范围(在同一个类中);2) 函数名字相同;3) 参数不同;4) virtual关键字可有可无。覆盖的特征有:1) 不同的范围(分别位于派生类与基类);2) 函数名字相同;3) 参数相同;
      

  7.   

    @lz:
    1.>虚方法是可以在派生类中进行重写,但本身又具有方法体的函数成员
      抽象方法只是提供了方法的签名,但不具有方法的实现.需要在派生类中进行覆写.
    2.>覆写上面已经提到了,简单描述一下重载,所谓重载简单来说就是方法的签名不同,比如参数的个数,类型等
    3.>实现接口,就是将从接口中的抽象方法进行实现.这里所指的实现就是使方法具有实际的执行行为.
      显示实现接口的目的可能是避免区分接口间方法的名称的冲突。
    建议lz动手实践一下,自然就明白了.