【亚洲必赢官网】中抽象类和接口的界别,抽象类类成员

一.
不能够创立抽象类的实例。

抽象类和类成员,抽象类类成员

  1. 不可能创造抽象类的实例。

  2. 抽象类首假使用来作为基类,然则抽象类也足以持续其余普通类或抽象类。

  3. 虚幻成员中得以涵盖抽象成员和平凡带完毕的成员。

肆.
别的派生自抽象类的类必须利用override关键字贯彻该类全数的肤浅成员,除非派生类本身也是抽象类。

  1. 空洞成员只可以注脚在抽象类中。

  2. 泛泛成员包涵:方法、属性、事件、索引。

    namespace abstract_Example

    【亚洲必赢官网】中抽象类和接口的界别,抽象类类成员。 {

          class Program
         {
              static void Main(string[] args)
             {
                    MyClass m = new MyClass();
                    m.PropertyValue = 100;
                    m.Output();
                    m.DoWork(m.PropertyValue );
                    Console.ReadKey();
              }
              public abstract class A
              {
                    public abstract void DoWork(int i);   //抽象成员只能声明在抽象类中 
                    public abstract int PropertyValue
                    {
                         get;
                         set;
                    }
                    public void Output()                        // 抽象类中可以包含普通带实现的成员
                    {
                         Console.WriteLine("I am Abstract Class A");
                    }
               }
               public class MyClass:A
               {
                     int MyValue;
                     public override void DoWork(int i)    //派生类必须全部实现基类中所有抽象成员
                     {
                          Console.WriteLine("I am Class MyClass. My Value is {0}",i);
                     } 
                     public override int PropertyValue
    
                     {
                          get { return MyValue; }
                          set{MyValue = value;}
                      }
                }
          }
    

    }

 

一.
无法创建抽象类的实例。 2.
抽象类首借使用来作为基类,可是抽象类也足以两次三番其余普通类或抽象类。…

大家在编制程序时都轻巧把抽象类和接口搞混,上面为大家从概念上上课抽象类和接口的分别:

壹.
不能创设抽象类的实例。

二.
抽象类首倘若用来作为基类,可是抽象类也得以承接别的普通类或抽象类。

     一、抽象类:

贰.
抽象类主倘若用来作为基类,可是抽象类也足以三番5遍其余普通类或抽象类。

三.
浮泛成员中能够涵盖抽象成员和1般性带达成的成员。

     含有abstract修饰符的class即为抽象类,抽象类是超过常规规的类,只是不能被实例化,能够创建多个变量,其品种是3个抽象类,并让它指向具体子类的3个实例;除此以外,具有类的别的特色;首要的是抽象类能够包涵抽象方法,那是平时类所不能够的。抽象方法只可以宣称于抽象类中,且不包涵别的完结,派生类必须覆盖它们。此外,抽象类能够派生自叁个抽象类,可以覆盖基类的抽象方法也能够不掩盖。

3.
架空成员中可以涵盖抽象成员和日常带实现的积极分子。

4.
别样派生自抽象类的类必须使用override关键字贯彻该类全部的悬空成员,除非派生类自个儿也是抽象类。

    二、接口:

肆.
任何派生自抽象类的类必须使用override关键字贯彻该类全体的聊以自慰成员,除非派生类本身也是抽象类。

伍.
虚无成员只可以表达在抽象类中。

    接口是引用类型的,类似于类,和抽象类的相似之处有3点:    
一、不可能实例化;     二、包罗未达成的措施表明;    
叁、派生类必须兑现未落到实处的艺术,抽象类是空洞方法,接口则是全体成员(不仅是艺术包涵其余成员);

亚洲必赢官网,伍.
空洞成员只好注明在抽象类中。

陆.
浮泛成员包涵:方法、属性、事件、索引。

    接口有如下特征:

陆.
虚无成员包括:方法、属性、事件、索引。

namespace abstract_Example

{

         class Program
        {
             static void Main(string[] args)
            {
                   MyClass m = new MyClass();
                   m.PropertyValue = 100;
                   m.Output();
                   m.DoWork(m.PropertyValue );
                   Console.ReadKey();
             }
             public abstract class A
             {
                   public abstract void DoWork(int i);   //抽象成员只能声明在抽象类中 
                   public abstract int PropertyValue
                   {
                        get;
                        set;
                   }
                   public void Output()                        // 抽象类中可以包含普通带实现的成员
                   {
                        Console.WriteLine("I am Abstract Class A");
                   }
              }
              public class MyClass:A
              {
                    int MyValue;
                    public override void DoWork(int i)    //派生类必须全部实现基类中所有抽象成员
                    {
                         Console.WriteLine("I am Class MyClass. My Value is {0}",i);
                    } 
                    public override int PropertyValue

                    {
                         get { return MyValue; }
                         set{MyValue = value;}
                     }
               }
         }
}

   
接口除了能够涵盖方法之外,还能包括属性、索引器、事件,而且这么些分子都被定义为国有的。除此而外,不可能包罗别的其余的积极分子,例如:常量、域、构造函数、析构函数、静态成员。一个类能够直接接轨七个接口,但不得不一间接轨3个类(包罗抽象类)。
 

namespace abstract_Example

{

         class Program
        {
             static void Main(string[] args)
            {
                   MyClass m = new MyClass();
                   m.PropertyValue = 100;
                   m.Output();
                   m.DoWork(m.PropertyValue );
                   Console.ReadKey();
             }
             public abstract class A
             {
                   public abstract void DoWork(int i);   //抽象成员只能声明在抽象类中 
                   public abstract int PropertyValue
                   {
                        get;
                        set;
                   }
                   public void Output()                        // 抽象类中可以包含普通带实现的成员
                   {
                        Console.WriteLine("I am Abstract Class A");
                   }
              }
              public class MyClass:A
              {
                    int MyValue;
                    public override void DoWork(int i)    //派生类必须全部实现基类中所有抽象成员
                    {
                         Console.WriteLine("I am Class MyClass. My Value is {0}",i);
                    } 
                    public override int PropertyValue

                    {
                         get { return MyValue; }
                         set{MyValue = value;}
                     }
               }
         }
}

 

   两者的语法差距:

 

   
一.抽象类能够有构造方法,接口中不能够有构造方法。

   
二.抽象类中可以有普通成员变量,接口中从不常见成员变量

   
3.抽象类中能够包含非抽象的壹般性方法,接口中的全数办法必须都以抽象的,不可能有非抽象的数见不鲜方法。

    四. 抽象类中的抽象方法的访问类型能够是public,protected,但接口中的抽象方法只好是public类型的,并且私下认可即为public
abstract类型。

    伍. 抽象类中得以分包静态方法,接口中不能包罗静态方法

    陆. 抽象类和接口中都能够包括静态成员变量,抽象类中的静态成员变量的访问类型能够随便,但接口中定义的变量只好是public static final类型,并且暗中同意即为public static
final类型。

    7. 1个类能够完成五个接口,但只可以继续三个抽象类。

   八.接口能够用来协助回调,而一连并不具有这几个特点.  
 九.抽象类完毕的具体方法默以为虚的,但贯彻接口的类中的接口方法却默以为非虚的,当然你也能够申明为虚的.
 

   抽象类和接口的行使:

  壹.比方预测要创立组件的多个本子,则开创抽象类。抽象类提供简单的格局来支配组件版本。
  二.只要创设的效率就要大范围的全异对象间使用,则使用接口。假如要设计小而简易的功用块,则应用接口。
 
叁.假若要统一筹划大的成效单元,则利用抽象类.假设要在组件的有所完毕间提供通用的已完毕效益,则运用抽象类。
  4.抽象类主要用来关系密切的目的;而接口适合为不相干的类提供通用作用。

  5.好的接口定义应该是装有专1功用性的,而不是多职能的,不然变成接口污染。假若1个类只是完成了这么些接口的中三个效果,而只好去贯彻接口中的别的办法,就叫接口污染。  

网站地图xml地图