C#-抽象类与接口

文章目录

  • 一、抽象类和接口总结
    • 总结
    • 补充说明
    • 主要区别
  • 二、抽象类
    • 2.1 抽象类概述与声明
    • 2.2 抽象方法
    • 2.3 抽象类与抽象方法的使用
  • 三、接口
    • 3.1 接口概述
      • 概述
      • 特征
      • 声明
      • 示例
    • 3.2 接口的实现和继承
      • 说明
      • 示例
    • 3.3 显式接口成员实现
      • 说明
      • 注意
      • 示例

一、抽象类和接口总结

总结

抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象的基类,贡献某些主要的特性,例如共同的目的和结构。
接口则主要是用于类,为这些类去添加不同的方法(行为)。

补充说明

抽象类和接口都包含可以由派生类继承的成员,他们都能直接实例化,但可以声明他们的变量;
这样做,可以使用多态性把继承这两种类型的对象指定给他们的变量;
接着通过这些变量来使用这些类型的成员,但不能直接访问派生类中的其他成员【如上述例子】

主要区别

1、他们的派生类只能继承一个基类,即只能直接继承一个抽象类,但可以继承任意多个接口;
2、抽象类中可以定义成员的实现,但接口中不可以;
3、抽象类中可以包含字段、构造函数、析构函数、静态成员或常量等,接口中不可以;
4、抽象类中的成员可以是私有的(只要他们不是抽象的)、受保护的、内部的或受保护的内部成员(受保护的内部成员只能在应用程序的代码或派生类中访问),但接口中的成员必须是公共的。

二、抽象类

2.1 抽象类概述与声明

一般将父类定义为抽象类,需要使用这个父类进行多态与继承。
继承树中越是向上,类就越发抽象;例如:奔驰继承汽车类,汽车类继承交通工具类等。

声明:使用abstract关键字

访问修饰符  abstract class 类名:基类或接口
{
}

声明抽象类

public abstract class myClass
{public int i;public void func(){	}
}

声明抽象类时,abstract、class和类名外是必须的;其余可选

2.2 抽象方法

抽象方法没有方法体,这个方法本身没有任何意义,需要被继承的类进行重写。
如果一个类中有抽象方法,那么这个类就需要被标记为抽象类。

抽象方法必须声明在抽象类中。
声明抽象方法时,不能使用virtual、static、private修饰符。

抽象方法声明引入了一个新方法,不提供方法的实现,因此方法体只包含一个分号。
当从抽象类的派生一个非抽象类时,需要在非抽象类中重写抽象方法,以提供具体的实现,重写抽象方法时使用override关键字。

声明:使用使用abstract关键字

public abstract class myClass
{public int i;public void func(){	}//声明抽象方法public abstract void method();
}

2.3 抽象类与抽象方法的使用

//声明抽象类abstract class MyClass{private string name;private int age;public string Name{get { return name; }set { name = value; }}public int Age{get { return age; }set { age = value; }}//抽象方法public abstract void showInfo();}//继承抽象类class SonClass : MyClass{//重写抽象方法public override void showInfo(){Console.WriteLine($"My name is:{this.Name},I am {this.Age} years old.");}}internal class Program{static void Main(string[] args){SonClass sonClass = new SonClass();	//实例化派生类MyClass son = sonClass;	//使用派生类实例化抽象类son.Age = 10;son.Name = "Nick";son.showInfo();Console.ReadLine();}}

运行结果:
运行结果

三、接口

3.1 接口概述

概述

由于C#中是单继承,但客观世界中出现多重继承的情况比较多,因此通过接口实现多重继承的功能。
接口是抽象类的延申,可以视作纯粹的抽象类,其中的所有方法都没有方法体。
使用接口继承关系
接口用来定义程序的协议,描述可属于任何类或结构的一组相关行为。
接口可由 方法、属性、事件、索引器 4种成员类型的任何组合构成,但不能包含字段。
类和结构可以继承多个接口,接口也可以继承其他的接口。

特征

接口可以将方法、属性、索引器、事件作为成员,但不能给这些成员设置具体的值。
特征:
类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
不能直接实例化接口。
接口可以包含事件、索引器、方法和属性。
接口不包含方法的实现。
类和结构可从多个接口继承。
接口自身可从多个接口继承。

声明

使用interface关键字,语法格式如下:

修饰符		interface		接口名称:继承的接口列表
{接口内容;
}

声明接口时,除interface关键字和接口名称外,其他的都是可选项;
可使用new、public、protected、internal、private等修饰符声明接口,但接口成员必须是公开的。

示例

interface ImyInterface
{string ID		//编号(可读可写){get;set;}string Name		//姓名(可读可写){get;set;}void ShowInfo();		//显式定义的编号和姓名
}

3.2 接口的实现和继承

说明

实现接口成员,类中对应的成员必须是公共的、非静态的,并且与接口成员具有相同的名称和签名。
类的属性和索引器可以为接口上定义的属性或索引器定义额外的访问器;例如,接口定义一个带有get的访问器属性,而实现该接口的类,可以声明同时带有get和set访问器的同意属性;但是,如果属性或索引器使用 显示 实现,则访问器必须匹配。

接口的实现通过类继承实现。声明实现接口的类时,需要在基类列表中包含所实现的接口的名称。

示例

    interface ITest1{void Test1();}interface ITest2:ITest1{void Test2();}class TestClass :  ITest2{public void Test1(){Console.WriteLine("ITest1接口的Test1()方法");}public void Test2(){Console.WriteLine("ITest2接口的Test2()方法");}}

3.3 显式接口成员实现

说明

如果类实现两个接口,并且两个接口包含具有相同签名的成员,那么在类中实现该成员将导致两个接口都使用该成员作为他们的实现。
这样可能会导致接口实现的不正确,因此需要显示实现接口成员,即创建一个仅通过该接口调用并且特定于该接口的类成员。
显示接口实现是通过 使用 接口名称和一个句点 命名该类成员来进行实现。

注意

显示接口成员实现中 不能包含 访问修饰符、abstract、virtual、override或static修饰符。
显示接口成员属于接口的成员,而不是类的成员你,因此,不能使用类对象直接访问,只能通过接口对象来访问。

示例

    interface ImyInterface1{int Add();}interface ImyInterface2{int Add();}class My_Class : ImyInterface1, ImyInterface2{int ImyInterface2.Add() { return 1; }int ImyInterface1.Add() { return 0; }}internal class Program{static void Main(string[] args){My_Class myClass = new My_Class();//myClass对象中不包含Add方法,只能通过实例化接口对象来调用Add方法ImyInterface1 imyInterface1 = myClass;Console.WriteLine($"调用接口ImyInterface1 中的Add方法结果为: {imyInterface1.Add()}");//将myClass作为ImyInterface2,来调用其中的Add()方法Console.WriteLine($"调用接口ImyInterface2 中的Add方法结果为: {(myClass as ImyInterface2).Add()}");Console.ReadLine();}}

运行结果:
运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/124770.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构 - 双向链表

文章目录 目录 文章目录 前言 一、什么是双向链表? 双向链表有什么优势? 二、双向链表的设计和实现 1.设计思想 尾增 : 在链表的末尾添加新的元素 头插 : 在链表头部插入节点 删除 : 根据val的值删除节点 查找 : 根据索引的值查找并返回节点 总结 前言 大家好,今天给…

MySQL 8.0安装及配置教程

一、下载mysql 进入官网https://www.mysql.com/,下载最新的的mysql8.0版本,该版本新增了许多特性。 进入下载页面,可以选择企业版本和社区版本,一般选择社区免费下载。 二、安装mysql(此方法默认安装至C盘&#xff0c…

WangEditor在Vue前端的应用

1、在Vue项目中安装WangEditor 对于Vue2: npm install wangeditor/editor-for-vue --save 或者 yarn add wangeditor/editor-for-vue 对于Vue3: npm install wangeditor/editor-for-vuenext --save 或者 yarn add wangeditor/editor-for-vuenext 2、将Wa…

Java“牵手”易贝商品列表数据,关键词搜索易贝商品数据接口,易贝API申请指南

ebay商城是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取ebay商品列表和商品详情页面数据,您可以通过开放平台的接口或者直接访问ebay商城的网页来获取商品详情信息。以下是两种常用方法的介绍&…

酷开系统游戏空间,开启大屏娱乐新玩法

在这个充满科技感和无限创意的时代,游戏已经成为我们生活的一部分。而随时着科技的不断发展,以及游戏爱好者的游戏需求在不断提高,促使游戏体验也向更加丰富多彩的方向发展。显然,酷开科技早已经认识到游戏发展的新蓝图&#xff0…

Android离线文字识别-tesseract4android调用

Android在线文字识别可以调阿里云的接口Android文字识别-阿里云OCR调用__花花的博客-CSDN博客 需要离线文字识别的话,可以调tesseract4android。个人测试效果不是特别理想,但是速度真的很快,VIVO S10后摄照片,80ms内识别完成。现…

阿里巴巴推出D.Design文生图网站(免费10-20张图)

简介: d.design是阿里巴巴推出的一个基于人工智能的设计工具,可以帮助用户轻松创建3D模型和场景。该工具提供了丰富的素材库和功能,可以满足用户的各种需求。 ​堆友堆友是Alibaba Design打造的设计师全成长周期服务平台,围绕品质…

汽车技术发展趋势及我国节能与新能源汽车技术

一、世界汽车技术发展趋势 汽车技术正向着低碳化、信息化、智能化方向发展;“三化”趋势成为世界主要汽车强国、主要车企共同的战略选择。 主要汽车战略及方向 在“三化”趋势下,各汽车强国在汽车节能技术、新能源汽车技术、智能网联汽车技术等方面持续…

第十八课、Qt 下载、安装与配置

功能描述:介绍了 Qt 的下载、安装和配置的全部过程,并对关键页面选项进行了详细说明 一、Qt 的下载 Qt 官方下载地址:https://www.qt.io/zh-cn/downloadhttps://download.qt.io/https://download.qt.io/https://www.qt.io/zh-cn/download进入…

2023数学建模国赛选题建议及BC题思路

大家好呀,全国大学生数学建模竞赛今天下午开赛啦,在这里先带来初步的选题建议及思路。 目前团队正在写B题和C题完整论文,后续还会持续更新哈,以下只是比较简略的图文版讲解,团队目前正在写B、C题完整论文,…

在线考试组卷Word文档导出|废纸篓|支持搜索组员查看练习情况|官网上线

土著刷题微信小程序v1.16,主要是对系统功能的优化,同时迭代开发了反馈热度比较高的【在线考试组卷word文档导出】和废纸篓功能。 下面将逐条介绍一下这一版的新功能和优化点。 在线考试组卷Word文档导出 【组卷Word导出】这个功能对于线下组织考试是个刚…

LeetCode 904. 水果成篮

题目链接 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目解析 在你去摘水果的时候,你当前只能拥有两种种类的水果,若想拿第三种水果,就需要发下前两种水果中的一种。 法一:滑动窗口哈希表(未优化…

怎么把pdf转换成jpg图片?

怎么把pdf转换成jpg图片?在工作中,如果我们收到无法修改编辑的PDF文件,可能会遇到一些困难。尤其是当平台或网站只支持JPG图片格式,而领导又要求我们将pdf文件改为JPG格式时,情况就更为棘手了。这对于我们打工一族来说…

CSS基础

一、选择器 1.1 元素选择器: 指定元素统一格式 p {text_align: center;}1.2 id选择器: 当我们想精准找到某元素的时候要就id选择器 /* id选择器使用 # 来定义 */ #para1{ text-align:center;}1.3 class选择器: 多个元素统一类型 /* cl…

XCon2023 | 聚铭网络受邀出席并发表“安全运营中心的应用及发展”主题演讲

作为国内信息安全领域“历史最悠久、举办规模最大、知名度最高”的闭门型技术峰会,2023年XCon安全焦点信息安全峰会(XFocus Information Security Conference)在8月30日于北京盛大召开,本次大会以“链无境皆可能”为主题&#xff…

索尼 toio™应用创意开发征文|toio俄罗斯方块游戏

目录 引言 摘要 创意简述 准备工作|手工开始 代码编写|合理集成 使用体验|近乎奇妙 引言 索尼toio™编程机器人是一款引领技术创新的产品,为开发者提供了一个全新的编程和创造平台。toio™的设计旨在将技术、塑性和乐趣融为…

深度解读智能媒体服务的重组和进化

统一“顶设”的智能媒体服务。 邹娟|演讲者 大家好,首先欢迎各位来到LVS的阿里云专场,我是来自阿里云视频云的邹娟。我本次分享的主题为《从规模化到全智能:智能媒体服务的重组与进化》。 本次分享分为以上四部分,一是…

论数据库的种类

摘要 数据库是现代信息管理和数据存储的重要工具,几乎在各个领域都有广泛应用。不同类型的数据库适用于不同的应用场景和需求。本文将介绍几种常见的数据库种类,并探讨它们的特点和适用范围。 正文 一、关系型数据库(RDBMS) 关…

2023高教社杯数学建模E题思路代码 - 黄河水沙监测数据分析

# 1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响, 以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位…

[.NET学习笔记] - Thread.Sleep与Task.Delay在生产中应用的性能测试

场景 有个Service类,自己在内部实现生产者/消费者模式。即多个指令输入该服务后对象后,Service内部有专门的消费线程执行传入的指令。每个指令的执行间隔为1秒。这里有两部分组成, 工作线程的载体。new Thread与Task.Run。执行等待的方法。…