注册
|
登录
发帖
热搜
活动
交友
discuz
论坛
BBS
翼度工具
翼度网址导航
开发工具
Linux命令速查
网页设计配色表
在线制作icon
颜色代码选取器
翼度科技
»
论坛
›
编程开发
›
.net
›
查看内容
返回列表
发新帖
Learning hard C#学习笔记——读书笔记 04
何艳娥
何艳娥
当前离线
积分
18
6
主题
6
帖子
18
积分
新手上路
新手上路, 积分 18, 距离下一级还需 32 积分
新手上路, 积分 18, 距离下一级还需 32 积分
积分
18
发消息
显示全部楼层
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的字段,表示能做
来源:
https://www.cnblogs.com/trueasureyuki/archive/2023/07/18/17563967.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
上一篇:
并发编程 ---为何要线程池化
下一篇:
利用Spire.Pdf实现PDF添加印章的操作
发表于 2023-7-18 23:35:15
举报
回复
使用道具
分享
返回列表
发新帖
本版积分规则
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
快速回复
快速回复
返回顶部
返回顶部
返回列表
返回列表