今天学习了接口和抽象类,但并没有很好的进行整理,所以现在写的时候,脑子里多少有点乱乱的,先从接口开始吧。

interface

接口,规定了所有派生类的需要遵循的标准,接口定义了需要做些什么,但是没有具体的做法,做法的实现由派生类来做。 接口的定义使用关键字Interface,由于需要派生类继承,所以接口默认是public类型,自然private或者protected是不可用的。接口的声明需要使用“I”开头进行标识。

  Interface INewInterface{
     
}

除了声明时的限制,接口的内容也只能包含方法属性事件索引器。接口中所有内容,都不可以使用访问修饰进行修饰,public也除外。方法没有实现主体,只包含一个方法签名;属性则只有一个属性访问器,但可以通过隐藏get或set方法,来实现属性的只读或者只写。

  Interface INewInterface
{
     int Age{get; set;}
     void ShowAge();
}

继承接口的可以是类也可以是结构体,但是都需要实现接口中声明的成员,For example:

  class NewClass:INewInterface{
     public int Age{get; set;}
     public void ShowAge(){
         Console.WriteLine($"age:{Age}");
    }
}

对于类而言,除了可以继承接口之外,最基本就是类与类之间的继承,但是在C#中,一个类的派生类只能有一个,一个类的基类也只能有一个,但是继承的接口个数是没有限制的。只是在书写上基类必须放在所有接口之前,基类与接口、接口与接口之间使用“,”进行分隔,for example:

  class BaseClass{
    ...
}
 Interface IFirst{
    ...
}
 Interface ISecond{
    ...
}
 class ChildClass:BaseClass, IFirst, ISecond {
     
}

接口之间也可以相互继承,进行扩展,但对于具体的派生类来说,就需要实现所有继承的接口的成员,for example:

  Interface IInterfaceA{
     void MethodA();
}
 
 Interface IInterfaceB:IInterfaceA{
     void MethodB();
}
 
 Class ClassA:IIterfaceB{
     public void MethodA(){
        ...
    }
     
     public void MethodB(){
        ...
    }
}

以上是接口的内容,下面说一说抽象类。

抽象类

抽象类和接口很像,也不能实例化,是对于一部分类中相同特性而做出的抽象。只不过与接口不同的地方就是,抽象类除了使用abstarct关键字修饰的方法不能有方法主体,普通的方法可以有方法的实现,派生类继承这些方法。 抽象类的声明使用abstract关键字,指定派生类要实现的方法也需要使用abstract关键字进行修饰,不可以使用private关键字进行修饰并且没有实现主体,具体的操作则是在派生类中重写该方法来实现,需要使用关键字override。For example:

  abstract class AbstractClass{
   public int Age{get; set;}
   public abstract void ShowInfo();
   public void DoWork(){
       Console.WriteLine("AbstractClass do work");
  }
}
 
 class PeopleClass:AbstractClass{
     public override void ShowInfo(){
         Console.WriteLine($"Age:{this.Age}");
    }
}
 
 class Program
  {
       static void Main(string[] args)
      {
         PeopleClass pc = new PeopleClass();
         pc.Age = 20;
         pc.ShowInfo();
         pc.DoWork();
      }
  }
   输出:
   Age:20
   AbstractClass do work
   请按任意键继续. . .

可以看的出来,抽象类和普通的类区别也不大,但还有一点接口的特性,像是普通类与接口之间的一个过渡。不像接口那么抽象,但又比普通类更加高级一点,是一种比较灵活的存在。 PS: 以上均是自己学习之后理解所写,水平有限难免会出现错误之处,总是唯恐给阅读到小伙伴造成误导,所以希望能够以质疑的态度去浏览,也希望小伙伴能够批评指出,共同成长。

C#中的接口和抽象类学习的更多相关文章

  1. Java中的接口与抽象类的区别

    由于随着jdk版本的更新,在jdk1.8时,接口也增强了,所以我们分别来说明一下. (1)jdk1.8之前 在jdk1.8之前,接口里面只能定义抽象方法和常量:而抽象类比普通类有一点不同,就是抽象类里 ...

  2. Delphi中的接口和抽象类

    参考:http://blog.csdn.net/xinzheng_wang/article/details/6058643 接口:Interface Delphi中接口中的关键字Interface,但 ...

  3. 浅谈C#中的接口和抽象类

    C#中接口为"其他方面互不相干"的类型提供公共的服务和特征:C#中class只支持但继承,使用接口却支持多继承,例如:C#中System.String是从System空间中的4个i ...

  4. 【转载】JAVA中综合接口和抽象类实现的一种“抽象接口”

    Muscleape个人总结:(这里的抽象接口是指:使用一个抽象类实现一个接口,是两部分结构) 使用一个抽象类直接实现接口,将接口中的方法区分为实现类必须要实现的和选择性实现的,其他需要实现接口的类型通 ...

  5. Java中的接口和抽象类

    接口和抽象类是Java设计中最基本的概念,它们都不能实例化对象,都可以实现多态,也都能用来创建匿名内部类.但实际使用上还有很多的不同. 两者的语法定义不同,对应的设计抽象关系也不同,接口主要是对行为的 ...

  6. java中的接口和抽象类的区别

    1.接口从用户的角度(使用实现的代码)看问题. 2.接口由编译器强制的一个模块间协作的合约. 3.无成员变量. 4.成员函数只能声明不能实现,(jdk1.8中的default 方法可以有方法体). 接 ...

  7. Java中的接口和抽象类(转)

    在面向对象的概念中,我们知道所有的对象都是通过类来描述的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类往往用来表征我们在对问题 ...

  8. vs中找到接口和抽象类的具体实现类

    如何找到接口和抽象类的具体实现类 1,可以使用:ctrl+k clrl+t打开调用层次结构窗口: 2,移动到实现节点: 3,然后可以转到具体实现: 第二种安装插件 ReSharper 第三种方法: 在 ...

  9. C#接口与抽象类学习笔记

    本笔记摘抄自:https://www.cnblogs.com/solan/archive/2012/08/01/CSharp06.html,记录一下学习过程以备后续查用. 摘要: 抽象类:是一种特殊的 ...

随机推荐

  1. Springboot打包成jar包形式发布

    1.修改配置文件pom.xml 添加打包形式设置为jar形式 <packaging>jar</packaging> 2.在build标签内添加内容如下 finalname为打包 ...

  2. 自定义类似smarty模板

    自定义类封装模板解析功能 原理其实比较简单,就是把html文件解析为一个超级字符串,然后把类似{{$mytitle}}这种结构的变量进行替换(str_replace)当然,实际中这样做可能导致频繁的磁 ...

  3. vue 多层组件相互嵌套的时候 数据源更新 dom没更新 彻底清除组件缓存

    当项目中存在多层组件相互嵌套 组件存在严重缓存时  this.$nextTick(() => { ..... }); 不管用 this.$forceUpdate(); 不管用 只能通过深拷贝浅拷 ...

  4. 埋点(Event Tracking)vs 无埋点(Codeless Tracking) vs 可视化埋点(Visual Event Tracking)

    在理解什么是埋点之前,首先需要了解一些基础知识:(以下摘自:http://www.chinawebanalytics.cn/auto-event-tracking-good-bad-ugly/) 我们 ...

  5. log4j.properties通用配置

    一.Log4j的配置文件分类Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties(key=value)文件,其中properties格式的配置文件最为常用,其有一个固定的 ...

  6. Nginx的TCP/UDP调度器

    安装nginx [root@proxy ~]# yum –y install gcc pcre-devel openssl-devel //安装依赖包 [root@proxy ~]# .tar.gz ...

  7. React-router的使用:标签跳转和编程式跳转

    目录: 1.demo:NavLink 标签跳转 2.标签渲染路由组件时,获取url参数 3.编程式跳转 参考文档 1)https://reacttraining.com/react-router/we ...

  8. Python一等函数

    一等对象 一等对象的定义: (1)在运行时创建 (2)能赋值给变量或数据结构中的元素 (3)能作为参数传给函数 (4)能作为函数的返回结果 ▲ Python中,整数.字符串和字典.函数都是一等对象. ...

  9. java中的变量和数据类型

    变量和javascript的变量含义一样 在Java中,变量分为两种:基本类型的变量和引用类型的变量.(javascript中同样是这样的) 基本数据类型 基本数据类型是CPU可以直接进行运算的类型. ...

  10. ZR#710

    雷劈数 题意: 现在给出两个整数,求出位于两个整数之间的所有的"雷劈数. 解法: 因为雷劈数特殊的性质,所以在数据范围中的雷劈数实际很少,直接暴力打表就行. CODE: #include&l ...