解析在C#中接口和类的异同

 更新时间:2019年01月22日 08:36:21   作者:Mogul1  
今天小编就为大家分享一篇关于解析在C#中接口和类的异同,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

不同点:

不能直接实例化接口。

接口不包含方法的实现。

接口可以多继承,类只能单继承。

类定义可以在不同的源文件之间进行拆分。

相同点:

接口、类和结构都可以从多个接口继承。

接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。

接口和类都可以包含事件、索引器、属性。

接口只能定义方法。

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.当多个类,都具有某个或某几个功能时(方法),但是这几个类型又不属于相同的系列(这几个类型没有共同的父类,就不能用抽象类。),所以这时,为了实现多态就可以考虑把这几个类型共有的方法提取到一个接口中,让这几个类型分别实现该接口

    10.当父类实现接口,子类继承父类。那么 接口就可以引用子类

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

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

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

总的来说,接口和抽象类是.Net为了更好的实现类型之间继承关系而提供的语言手段,而且两者有些相辅相成的关系。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • c#使用Socket发送HTTP/HTTPS请求的实现代码

    c#使用Socket发送HTTP/HTTPS请求的实现代码

    这篇文章主要介绍了c#使用Socket发送HTTP/HTTPS请求的实现代码,需要的朋友可以参考下
    2017-09-09
  • C#实现在控制台输入密码显示星号的方法

    C#实现在控制台输入密码显示星号的方法

    这篇文章主要介绍了C#实现在控制台输入密码显示星号的方法,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • C#对Json进行序列化和反序列化

    C#对Json进行序列化和反序列化

    这篇文章介绍了C#对Json进行序列化和反序列化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C#字符串与正则表达式的图文详解

    C#字符串与正则表达式的图文详解

    正则表达式是个非常好的工具,它的作用主要是用简单的有规则的表达式来检索和匹配一段字符串,这篇文章主要给大家介绍了关于C#字符串与正则表达式的相关资料,需要的朋友可以参考下
    2022-09-09
  • C#实现读取注册表监控当前操作系统已安装软件变化的方法

    C#实现读取注册表监控当前操作系统已安装软件变化的方法

    这篇文章主要介绍了C#实现读取注册表监控当前操作系统已安装软件变化的方法,涉及C#针对注册表的读取与监控技巧,非常具有实用价值,需要的朋友可以参考下
    2015-08-08
  • Unity3D启动外部程序并传递参数的实现

    Unity3D启动外部程序并传递参数的实现

    这篇文章主要介绍了Unity3D启动外部程序并传递参数的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • C# DataSet查看返回结果集的实现

    C# DataSet查看返回结果集的实现

    这篇文章主要介绍了C# DataSet查看返回结果集的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 基于WPF实现PDF的显示与转换

    基于WPF实现PDF的显示与转换

    这篇文章为大家详细主要介绍了如何基于WPF实现PDF的显示并转换成图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • C# 获取当前总毫秒数的实例讲解

    C# 获取当前总毫秒数的实例讲解

    这篇文章主要介绍了C# 获取当前总毫秒数的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • C#读写INI文件的最简方法

    C#读写INI文件的最简方法

    INI文件,全称为Initialization File(初始化文件),是一种传统的文本型配置文件格式,广泛应用于Windows操作系统及早期应用程序中,本文将聚焦于C#语言环境下,介绍如何以最简化的方式实现INI文件的读写操,需要的朋友可以参考下
    2025-01-01

最新评论