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,记录一下学习过程以备后续查用. 摘要: 抽象类:是一种特殊的 ...
随机推荐
- Springboot打包成jar包形式发布
1.修改配置文件pom.xml 添加打包形式设置为jar形式 <packaging>jar</packaging> 2.在build标签内添加内容如下 finalname为打包 ...
- 自定义类似smarty模板
自定义类封装模板解析功能 原理其实比较简单,就是把html文件解析为一个超级字符串,然后把类似{{$mytitle}}这种结构的变量进行替换(str_replace)当然,实际中这样做可能导致频繁的磁 ...
- vue 多层组件相互嵌套的时候 数据源更新 dom没更新 彻底清除组件缓存
当项目中存在多层组件相互嵌套 组件存在严重缓存时 this.$nextTick(() => { ..... }); 不管用 this.$forceUpdate(); 不管用 只能通过深拷贝浅拷 ...
- 埋点(Event Tracking)vs 无埋点(Codeless Tracking) vs 可视化埋点(Visual Event Tracking)
在理解什么是埋点之前,首先需要了解一些基础知识:(以下摘自:http://www.chinawebanalytics.cn/auto-event-tracking-good-bad-ugly/) 我们 ...
- log4j.properties通用配置
一.Log4j的配置文件分类Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties(key=value)文件,其中properties格式的配置文件最为常用,其有一个固定的 ...
- Nginx的TCP/UDP调度器
安装nginx [root@proxy ~]# yum –y install gcc pcre-devel openssl-devel //安装依赖包 [root@proxy ~]# .tar.gz ...
- React-router的使用:标签跳转和编程式跳转
目录: 1.demo:NavLink 标签跳转 2.标签渲染路由组件时,获取url参数 3.编程式跳转 参考文档 1)https://reacttraining.com/react-router/we ...
- Python一等函数
一等对象 一等对象的定义: (1)在运行时创建 (2)能赋值给变量或数据结构中的元素 (3)能作为参数传给函数 (4)能作为函数的返回结果 ▲ Python中,整数.字符串和字典.函数都是一等对象. ...
- java中的变量和数据类型
变量和javascript的变量含义一样 在Java中,变量分为两种:基本类型的变量和引用类型的变量.(javascript中同样是这样的) 基本数据类型 基本数据类型是CPU可以直接进行运算的类型. ...
- ZR#710
雷劈数 题意: 现在给出两个整数,求出位于两个整数之间的所有的"雷劈数. 解法: 因为雷劈数特殊的性质,所以在数据范围中的雷劈数实际很少,直接暴力打表就行. CODE: #include&l ...