C#中的接口和抽象类学习
今天学习了接口和抽象类,但并没有很好的进行整理,所以现在写的时候,脑子里多少有点乱乱的,先从接口开始吧。
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#中的接口和抽象类学习的更多相关文章
- Java中的接口与抽象类的区别
由于随着jdk版本的更新,在jdk1.8时,接口也增强了,所以我们分别来说明一下. (1)jdk1.8之前 在jdk1.8之前,接口里面只能定义抽象方法和常量:而抽象类比普通类有一点不同,就是抽象类里 ...
- Delphi中的接口和抽象类
参考:http://blog.csdn.net/xinzheng_wang/article/details/6058643 接口:Interface Delphi中接口中的关键字Interface,但 ...
- 浅谈C#中的接口和抽象类
C#中接口为"其他方面互不相干"的类型提供公共的服务和特征:C#中class只支持但继承,使用接口却支持多继承,例如:C#中System.String是从System空间中的4个i ...
- 【转载】JAVA中综合接口和抽象类实现的一种“抽象接口”
Muscleape个人总结:(这里的抽象接口是指:使用一个抽象类实现一个接口,是两部分结构) 使用一个抽象类直接实现接口,将接口中的方法区分为实现类必须要实现的和选择性实现的,其他需要实现接口的类型通 ...
- Java中的接口和抽象类
接口和抽象类是Java设计中最基本的概念,它们都不能实例化对象,都可以实现多态,也都能用来创建匿名内部类.但实际使用上还有很多的不同. 两者的语法定义不同,对应的设计抽象关系也不同,接口主要是对行为的 ...
- java中的接口和抽象类的区别
1.接口从用户的角度(使用实现的代码)看问题. 2.接口由编译器强制的一个模块间协作的合约. 3.无成员变量. 4.成员函数只能声明不能实现,(jdk1.8中的default 方法可以有方法体). 接 ...
- Java中的接口和抽象类(转)
在面向对象的概念中,我们知道所有的对象都是通过类来描述的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类往往用来表征我们在对问题 ...
- vs中找到接口和抽象类的具体实现类
如何找到接口和抽象类的具体实现类 1,可以使用:ctrl+k clrl+t打开调用层次结构窗口: 2,移动到实现节点: 3,然后可以转到具体实现: 第二种安装插件 ReSharper 第三种方法: 在 ...
- C#接口与抽象类学习笔记
本笔记摘抄自:https://www.cnblogs.com/solan/archive/2012/08/01/CSharp06.html,记录一下学习过程以备后续查用. 摘要: 抽象类:是一种特殊的 ...
随机推荐
- python_tkinter组件摆放方式
1.最小界面组成 # 导入tkinter模块 import tkinter # 创建主窗口对象 root = tkinter.Tk() # 设置窗口大小(最小值:像素) root.minsize(30 ...
- appium+python 【Mac】UI自动化测试封装框架介绍 <三>---脚本的执行
我自己编写的脚本框架中,所有的脚本执行均放在一个py文件中,此文件作为启动文件执行,包含了运行此文件将执行脚本.分配设备端口.自启appium服务等. 详细的介绍待后期补充.
- 解决从其他地方拷贝过来的Android项目在本机不能运行(报错)的问题
这个问题一般是由gradle版本不同引起的.要解决可以这样: 一.在确保本机Android studio 正常使用的情况下,在本机新建一个Android项目 二.在文件夹中打开新建的Android项目 ...
- ISCSI共享存储
ISCSI网络磁盘 默认端口:3260 服务端: 一. 二.安装软件:targetcli 用命令targetcli进行配置------------------------进入iscsi磁盘配置模 ...
- PHP mysqli_more_results() 函数
定义和用法 mysqli_more_results() 函数检查一个多查询是否有更多的结果. 语法 mysqli_more_results(connection); 参数 描述 connection ...
- vue项目实现详情页后退缓存之前的数据
vue项目实现详情页后退缓存之前的数据 2019年02月19日 14:54:57 不想写代码的程序员 阅读数:244 一.需要缓存的内容: 1.后退缓存条件查询的数据 2.后退缓存分页信息 二.实 ...
- Sysinternals
http://baike.baidu.com/link?url=LwEFVIcB4h8WaS6sVVH2toBJ0GZUA28yymm1sLsGpDrzF3G2BCZenlHwIsYZdVJZQExE ...
- luogu 2519 [HAOI2011]problem a 动态规划+树状数组
发现每一次 $[b[i]+1,n-a[i]]$ 这个区间的分数必须相同,否则不合法. 而一个相同的区间 $[l,r]$ 最多只能出现区间长度次. 于是,就得到了一个 $dp:$ 将每一种区间的出现次数 ...
- SVN - Subversion
Subversion yum install -y subversion 或者 subversion Edge 下载: # wget https://downloads-guests.open.col ...
- UVALive 7308 Tom and Jerry 猫抓老鼠 物理题
题目链接: 就是一个老鼠在环上一速度v开始绕环走,一只猫从圆心出发,任意时刻圆心,猫,老鼠三者在一条直线上,且速度也是v,求多久后猫抓到老鼠. #include <cstdio> #inc ...