论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
Learning hard C#学习笔记——读书笔记 04
Learning hard C#学习笔记——读书笔记 04
西河刘卡车医
金牌会员
|
2023-7-19 00:55:51
|
显示全部楼层
|
阅读模式
楼主
主题
919
|
帖子
919
|
积分
2757
1.什么是接口
接口可以认为是一种规范,它是一种类的构建规范,它里面定义了一系列的方法和类型,但是没有具体的实现,需要继承它的类去自我实现
2.接口的定义
使用 VS2022 在解决方案管理器这里,添加新建项
在添加新建项模板这里,选择接口
最后创建出来的接口如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace classTest
{
internal interface Interface1
{
}
}
复制代码
接口的注意点:
在接口中定义的方法不能添加任何的修饰符,接口的方法默认是 public
在接口中可以定义属性、事件、索引器、方法,或者这四类成员的任意组合,但是接口不能包含字段、运算符重载、实例构造函数和析构函数
接口的
所有成员默认都是公共的
,不能用public、private、protected来修饰,也不能用static修饰
3.实现接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace classTest
{
public class Person : ICustomCompare
{
int age;
public int Age { get { return age; } set { age = value; } }
public int compareTo(object other)
{
if (other == null) {
return 1;
}
// 这里强制类型转换一手
Person value = (Person)other;
if (value.age > this.age)
{
return -1;
}
else
{
return 1;
}
return 0;
}
}
}
复制代码
using classTest;
class Program
{
static void Main(string[] args)
{
Person p1 = new Person();
p1.Age = 10;
Person p2 = new Person();
p2.Age = 20;
if (p1.compareTo(p2) > 0)
{
Console.WriteLine("p1 > p2");
}
else if (p1.compareTo(p2) < 0)
{
Console.WriteLine("p1 > p2");
}
else {
Console.WriteLine("一样大");
}
}
}
复制代码
4.显式的实现接口
之前我们的实现方式是隐式的实现接口的方式,即没有指出是哪个接口的compareTo()方法
而现在是显式的实现方式
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace classTest
{
internal interface ICustomCompare
{
int compareTo(object other);
}
// 中国人打招呼的方式
internal interface IChineseGreeting
{
void sayHello();
}
// 美国人打招呼的方式
internal interface IAmericanGreeting {
void sayHello();
}
}
复制代码
我们可以发现,上面的代码中,IChineseGreeting、IAmericanGreeting这两个接口,都有sayHello方法,当我们有一个类去实现两个接口的时候,会出现一个问题,就是,我们到底是在实现IChineseGreeting的sayHello()方法,还是在实现IAmericanGreeting的sayHello()方法,还是同时实现?
最后我们发现是两个接口的实现方式都一样,但是如果,我们想要有不同的实现方式,就需要显式的实现接口
下面这种方式就是显式的实现接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace classTest
{
internal class Speaker : IAmericanGreeting, IChineseGreeting
{
// 显式的实现接口
void IChineseGreeting.sayHello()
{
Console.WriteLine("你好");
}
void IAmericanGreeting.sayHello()
{
Console.WriteLine("Hello");
}
}
}
复制代码
显式实现接口的注意点:
若显式实现接口,
方法不能使用任何的访问修饰符
,显式实现的成员都默认为私有
显式实现的成员默认都是私有的,这些成员都不能通过类的对象进行访问
5.显式/隐式实现接口的场景
采用隐式接口实现时,类和接口都可以访问接口中的方法,而采用显式实现接口,接口的方法只能通过接口来访问,因为此时接口的方法默认为私有
当类实现单个接口时,通常使用隐式接口实现
当类实现多个接口时,并且接口的方法名称、参数和返回类型都相同的时候,则应该使用显式接口实现
6.接口与抽象类
接口与抽象类的区别主要有以下几点
抽象类使用 abstract 关键字定义,而接口使用 interface 进行定义;它们都不能进行实例化
抽象类中可以包含虚方法、非抽象方法、和静态成员,接口中不能包含虚方法和任何的静态成员,并且
接口中只能定义方法
,不能有具体实现,方法具体由实现类来完成
抽象类不能实现多继承,接口支持多实现
抽象类是对一类对象的抽象,继承与抽象类与抽象类为属于的关系;而类实现接口,只是代表实现类具有接口声明的方法,是一种Can-do的关系,所以接口后一般带有able的字段,表示能做
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
西河刘卡车医
金牌会员
这个人很懒什么都没写!
楼主热帖
【容器~原始真解】Docker —— 容器的 ...
PHP判断远程文件是否存在的四种方法 ...
超融合一体机上新,打通信创落地的“顶 ...
工行、建行、农行的 IT 架构是什么样的 ...
Spring--循环依赖的原理(四)--为什么用 ...
轻量级CI/CD发布部署环境搭建及使用_06 ...
全双工与半双工技术剖析
CAN总线简介
MySQL高可用架构搭建实战
【笔者感悟】笔者的学习心得【六】 ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表