zoukankan      html  css  js  c++  java
  • C#中的接口和类有什么异同?

    不同点:

    1. 不能直接实例化接口。
    2. 接口不包含方法的实现。
    3. 接口可以多继承,类只能单继承。
    4. 类定义可在不同的源文件之间进行拆分

    相同点:

    1. 接口、类和结构都可以从多个接口继承。
    2. 接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
    3. 接口和类都可以包含事件、索引器、方法和属性

           如图:     

    1.

     

    类的分类有:抽象类(abstract)、密封类(sealed)、静态类(static)

     

     

    1.1 抽象类

     

    关键字: abstract
    使用目的:若所有子类拥有共同的特性,可以把这个特性放到一个抽象类中,子类继承此抽象类。 
    特点:
        1.不能被实例化;ClassName en=new ClassName();//这样会报错。
        2.抽象成员必须包含在抽象类中。
        3.抽象类除了抽象成员外,还可以包含别的成员(不用关键字 abstract)。
        4.子类继承抽象父类后,必须把父类中的所有抽象成员都重写(非抽象成员不必重写)。除非子类也是个抽象类。
        5.抽象成员的访问修饰符不能是private。
        6.抽象类是有构造函数,虽然不能被实例化。
        7.abstract不能用于字段成员,可定义成属性。
        8.abstract用于方法时,方法不能定义主体(内容)。
        9.抽象类也可以实现接口,但要把接口的成员前面标记个abstract。

     

    1.2 密封类

     

    关键字: sealed
    使用目的:不需要子类来继承他。如 String;
    特点:
        1.不能被继承,如:string ,不能被继承。
        2.子类重写后,前面加个sealed,那么子类就不能再被继承。

     

    1.3 静态类

     

    关键字: static
    使用目的:不需要实例化,可以直接类名引用静态方法。比如 工具类。
    特点:
        1.相似于sealed与abstract使用。
        2.静态成员在整个程序退出时才释放资源,所以尽量别写静态字段、属性。最好是静态方法。

     

    2. 接口

     

    关键字: interface
    使用目的:抽象类所拥有的共性,也可以概括为:为了多态。
    特点:
        1.接口中只能包含方法。(方法、属性、索引器、事件)
        2.接口中的方法不能有任何实现
        3.接口中的成员不能有任何访问修饰符(哪怕是public)
        4.接口不能被实例化
        5.实现接口的类,必须实现接口的所有成员(这里跟抽象类一样)
        6.类不能多继承,所以在某些情况下,只能用接口来代替。接口可以多实现(一个类可以继承多个接口,而只能继承一个类)
        7.接口的主要目的就是为了实现多态
        8.当一个类,同时继承了某个类,并且也实现了某些接口的时候,必须要将继承的类写在第一个(如果一个类同时继承了父类和接口的时候,要把父类写在最前面)
    9.当多个类,都具有某个或某几个功能时(方法),但是这几个类型又不属于相同的系列(这几个类型没有共同的父类,就不能用抽象类。),所以这时,
    为了实现多态就可以考虑把这几个类型共有的方法提取到一个接口中,让这几个类型分别实现该接口

     

       11.不要在一个接口中写过多的方法,避免造成接口污染。可编写多个接口,在每个接口中,分别定义方法

     

       12.实现接口方法的时候,不要有override关键字,直接跟平常定义一样

     

       13.接口方法的显示实现,如果多个接口里有相同的方法名。那么第一个方法名默认的引用的是排在最前面的接口,如果要使用后面接口的方法,就要显示实现:接口名.方法名。
    访问修饰符是private

     

    
    

     

  • 相关阅读:
    【转】c语言中的#号和##号的作用
    stm32 HAL库编程驱动控制文件<stm32f1xx_hal_conf.h>的使能方法
    rt-thread是如何做到通过menuconfig配置将相应文件加入工程和从工程中除去
    rt-thread 学习路线
    stm32使用rt-thread在文件《stm32f1xx_hal.h》中头文件包含顺序引出的错误
    rt-thread之stm32系列BSP制作方法
    使用rt-thread中BSP-stm32 ENV构建工具报错
    rt-thread中动态内存分配之小内存管理模块方法的一点理解
    内存对齐
    rt-thread中线程内置定时器的作用 ---
  • 原文地址:https://www.cnblogs.com/hanningHNN/p/13761972.html
Copyright © 2011-2022 走看看