当前位置: 代码迷 >> .NET分析设计 >> 抽象方法的有关问题
  详细解决方案

抽象方法的有关问题

热度:1975   发布时间:2013-02-25 00:00:00.0
抽象方法的问题
什么时候定义抽象方法,为什么定义成抽象的,怎么定义

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

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

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

------解决方案--------------------------------------------------------
当你定义一个基类,你想要求继承这个基类必须实现一个方法,而且你想在这个基类中使用这个方法时,那么这个方法可以定义成抽象方法。 
接口只能要求继承这个接口实现方法,但因为它没有实现,所以他不能使用这个方法。
------解决方案--------------------------------------------------------
引用楼主 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…
  相关解决方案