zoukankan      html  css  js  c++  java
  • c#接口和抽象类的一些概念

    第一个问题是C#接口和Java接口的区别和共同点:

    1)Java里面的接口可以有域field,比如,public static final abc = 123, 从设计上来说,这样做是不对的,因为接口是给所有实现的一个契约,以后的版本如果不需要这些field,就不能移除,因为别的公司已经使用了你发行的库,你必须遵守承诺。而C#不能有域,这点上来说C#做的比较好。

    2)对C#来说,接口的所有成员都定义为公共成员,并且接口不能包含常量、字段(私有数据成员)、构造函数、析构函数或任何类型的静态成员。如果为接口的成员指定任何修饰符,编译器将会产生错误。C#的接口成员包括方法,属性,和索引器的声明。

    为了实现接口,我们可以从接口派生类。这样的派生类必须为所有接口的方法提供实现,除非派生类声明为抽象的。

    接口的声明与 Java 完全一样。在接口定义中,通过单独使用 get 和 set 关键字,属性仅指示它的类型,以及它是只读的、只写的还是可读写的。

    3)C#和Java的接口都只能有方法的签名,所谓方法的签名就是参数类型和返回值,而且为接口方法指定任何修饰符(public,private,protected,internal)都是非法的。

    4)在c#中实现多个接口

    通过使用下面的语法,一个类可以实现多个接口:

    public class MyClass : interfacename1, interfacename2, interfacename3

    如果一个类实现多个接口,则成员的名称会存在二义性,通过使用属性或方法名的完全限定符可以解决这个问题。换句话说,通过使用方法的完全限定名来指示它属于哪个接口(例如属于 IMethodInterface.MethodA),派生类可以解决这种冲突。

    第二个问题是,什么时候使用接口,什么时候使用抽象类。

    接口是一种协定,抽象类则相当于类模板。
    使用抽象类,而不要使用接口来分离协定与实现。
    如果需要提供多态层次结构的值类型,使用接口。
    如果一个类型必须实现多个协定,或者协定适用于多种类型,使用接口。
    虽然抽象类和接口都支持将协定与实现分离开来,但接口不能指定以后版本中的新成员,而抽象类可以根据需要添加成员以支持更多功能。

  • 相关阅读:
    学习笔记4
    学习笔记2
    学习笔记1
    树莓派与Arduino串口通信
    团队大作业第三周周报
    团队大作业第二周周报
    团队大作业第一周周报
    RTCSD_第三次作业
    RTCSD_第二次作业
    RTCSD_第一次作业
  • 原文地址:https://www.cnblogs.com/grkin/p/2975020.html
Copyright © 2011-2022 走看看