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

抽象方法的问题
什么时候定义抽象方法,为什么定义成抽象的,怎么定义

------解决方案--------------------
抽象方法就是把具体实现留给派生类,达到实现与意图的分离,其实也可以用接口来实现
------解决方案--------------------
抽象方法用于对象不需要或不能够实现却要求子类必须实现的场景...

例如...人.说话()方法,你构造“人”这个类时无法确定“人”如何说话,只有它的子类才能实现,如中国人.说话(){讲中文;}...俄国人.说话(){讲俄文;}...
------解决方案--------------------
关于什么时候定义抽象方法,楼主可以参考一下“模板方法模式”,我想你应该会从中得到启示。

------解决方案--------------------
建议用接口.
总之我也说不清楚为什么,看网上好多人都这么写代码.
------解决方案--------------------
探讨
建议用接口.
总之我也说不清楚为什么,看网上好多人都这么写代码.

------解决方案--------------------
当你定义一个基类,你想要求继承这个基类必须实现一个方法,而且你想在这个基类中使用这个方法时,那么这个方法可以定义成抽象方法。 
接口只能要求继承这个接口实现方法,但因为它没有实现,所以他不能使用这个方法。
------解决方案--------------------
引用楼主 harderLi 的帖子:
什么时候定义抽象方法,为什么定义成抽象的,怎么定义

------解决方案--------------------
探讨
建议用接口.
总之我也说不清楚为什么,看网上好多人都这么写代码.

------解决方案--------------------
有时候基类并不与具体的事物相联系,而是只表达一种抽象的概念,用以为它的派生类提供一个公共的界面,为此C#中引入了抽象类(abstract class)的概念。
对抽象类的使用有以下几点规定:
抽象类只能作为其它类的基类,它不能直接被实例化(不能使用new 操作符)
抽象类允许包含抽象成员,但这不是必须的;
抽象类不能同时又是密封的;
如果一个非抽象类从抽象类中派生,则其必须通过重写来实现所有继承而来的抽象成员

一个方法声明中如果加上abstract 修饰符我们称该方法为抽象方法(abstract method)。
如果一个方法被声明是抽象的,那么该方法默认也是一个虚方法。事实上抽象方法是一个新的虚方法,它不提供具体的方法实现代码
只能在抽象类中声明抽象方法
声明抽象方法只需要给出方法的原型
------解决方案--------------------
写个简单的小例子
C# code

abstract  class  Animal
{
       public string name;
       public int age; 
       public void  Move()
       { 
             Console.WriteLine(“动物都是可以动滴!!!”);
       }            
       public  abstract  void  Sound();       //抽象方法
}   
class    Dog :Animal    //继承
{
      public  int  Legs=4;
      public  override  void  Sound()
      {
    Console.WriteLine(“狗狗叫:汪!汪!汪!”);
      }
}  

class   Snake:Animal    //继承
{
      public override  void  Sound()
     {
           Console.WriteLine(“蛇发出丝~~丝~~的声音”);
  }
}
class  MyPet
{
       static void  Main()
       {
              //Animal  MyAnimal=new Animal();错误的,抽象类不能实例化
              Dog MyDog=new  Dog();
              Snake  MySnake=new Snake();
              MyDog.name=“小白”;
     MyDog.age=5;
              MyDog.Sound();

              MySnake.name=“斯内普”;
     MySnake.age=10;
              MySnake.Sound();
       }
}

------解决方案--------------------
抽象方法属于类,即当属于一类的时候用抽象类,例如卡车和小汽车都属于车,这是车类可以定义为抽象类,里面定义一些抽象方法供派生类实现。接口属于一种约束,当没有内部联系的时候,而是仅仅约束某个类要实现某种功能,这时候用接口。
------解决方案--------------------
探讨
写个简单的小例子

C# code
abstract class Animal
{
public string name;
public int age;
public void Move()
{
Console.WriteLine(“动物都是可以动滴!!!”);
}
public abstract void Sound(); //抽象方法
}
class Dog :Animal    //继承
{
public int Legs=4;
public override void Soun…