当前位置: 首页 > news >正文

C#其他知识点

接口类---interface

什么是接口? 在接口当中一般我们认为接口中的成员都是抽象的。

接口一般认为是功能的集合。在接口类当中定义的方法都是抽象象方法。(没有方法体)

接口一般我们认为它是一种标准,一种规范,一种约定。

给子类或者是派生类制定规范,规定,标准。

当子类继承了该接口类,那么就需要重写该接口类中定义的所有的抽象方法,(需要在子类中添加方法的具体实现)

接口的出现,是为了给子类提供一种能力,实现多态。

//定义一个接口代表的是一种能力
public interface IFLyAble
{
void Fly();
}
//定义一个class类Bird
public class Bird : IFlyAble
public void Fly()
{}
Console.WriteLine("鸟会飞");
3
public class Program
public static void Main(string[] args)
IFlyAble flyAble = new Bird();
flyAble.Fly();

接口类没有构造方法,也不能进行重载,所以接口不能实例化

接口类中的成员,不能添加任何修饰符,默认修饰符就是publicabstract

接口中的成员不能有任何的实现,属性不能有初始值,方法不不能有方法体都是以分号做结尾

在接口类中不能定义字段,一般定义属性(get和set)和方法。

接口类与接口类之间可以继承,并且可以实现多继承。单继承说的是由class定义的类,而由interface定义的类是可以多继承的。

//定义接口
public interface MyInterface01 { }
public interface MyInterface02: MyInterface01 { }
public interface MyInterface03: MyInterface01,MyInterface02{}
public interface MyInterface04:MyInterface01,MyInterface02,MyInterface03{}
public interface MyInterface05:MyInterface01,MyInterface02,MyInterface03,MyInterface04 {}

接口类不能继承class声明的类,但是class声明的类可以继承接口类,并且还可以继承多个接口类。

// 定义接口
public interface MyInterface01 /*: MyCLass*/ { }3
public interface MyInterface02: MyInterface01 { }
public interface Myinterface03: MyInterface01,MyInteerface02{}
public interface MyInterface04:MyInterface01,My1Interface02,MyInterface03 { }
public interface MyInterface05:MyInterface01,MyInterface02,MyInterface03,MyInter face04 {}
//定义一个c1ass声明的类
public class MyClass : MyInterface01,MyInterface202,MyInterface03,MyInterface04{}

一个class类在继承class类的时候同时还可以继承接口类,前提条件就是class类必须放在interface声明的接口类的前面

// 定义接口
public interface MyInterface01 /*: MyCLass*/ { }3
public interface MyInterface02: MyInterface01 { }
public interface Myinterface03: MyInterface01,MyInteerface02{}
public interface MyInterface04:MyInterface01,My1Interface02,MyInterface03 { }
public interface MyInterface05:MyInterface01,MyInterface02,MyInterface03,MyInter face04 {}
//定义一个c1ass声明的类
public class MyClass : MyInterface01,MyInterface202,MyInterface03,MyInterface04{}
//定义一个c1ass声明的类
public class Myclass2:MyClass, Myinterface01, Myinterface02, Myinteerface03, Myinterface04{}

接口只能继承接口,但是类可以继承接口也可以继承class类

如果一个抽象类继承了一个接口,那么该接口中的成员在抽象类中中也是必须实现的,需要进行方法重写。

当在程序当中定义了一个接口类,一般情况下我们会把接口的类名以"I"字母开头进行命名。

当一个类继承了多个接口,这多个接口当中有重名的方法,对于继承的子类来说,只需要在子类中重写一次即可。(如果重名的方法形参列

表不同,那么接口中定义了几个方法,子类就需要重写几个方法)

支持接口的显示实现

定义接口
public interface MyInterface01 /*: MyCLass*/
{}
void Study();
public interface MyInterface02 : MyInterface01
{
new void Study();
{}
//定义一个子类MyC1ass3
public class Myclass3 : MyInterface01, MyInterface02
//支持接口的显示实现
void MyInterface01. Study()
{}
void MyInterface02.Study() { }
//public void Study(int x) { }
}

接口的显示实现是为了解决子类中和接口中定义的重名方法 语法格式: 返回值类型接口名.方法名称(形参列表){方法体内容....}

public interface 接口名称
{
抽象方法...
}

其他知识点

SortedList集合

SortedList它是一个双列(键值对)排序集合,其中的键自动按照顺序进行排序。

该集合既可以使用带有泛型的特征,也可以不使用带有泛型的特证。

SortedList它是Hashtable和Array的结合体。

当使用Key来访问集合当中的元素时,其行为类似于Hashtable,当使用下标索引GetBylndex()和SetByIndex()来访问集合当中的元素时,其行为类似于Array数组。

//创建SortedList集合对象
SortedList sortedList = new SortedList();//无序添加输出是带有排序
//添加一些元素
sortedList.Add(3,"张三");
sortedList.Add(5,"王五");
sortedList.Add(7, "田七");
sortedList.Add(4,"李四");
sortedList.Add(6,"赵六");
sortedList.Add(8,"周八")
sortedList.Add(1,"天一")
// 遍历查看
ICollection keys = sortedList.Keys;
foreach(var key in keys)//var它是一个可变类型
{
object value = sortedList[key];//通过key获取value
Console.WriteLine(key +"---->" + value);
}

常用方法

高级方法

排序特征

如果我们想要实现自定义排序,需要让SortedList中的Key实现一个ICompare<T>接口

例子:

img

比较规则

只要是比较:规则如下:=0,位置相同不改变0---->x在y前 <0--->x在y后

设计模式

23种设计模式:对象创建型 结构型 行为型

依据面向对象编程六大设计原则:单一原则,接口隔离原则,依赖倒置原则,迪米特原则等等

单例模式

属于对象创建型中的其中一种

该模式的目的就是确保在程序运行过程中某一个类有且仅有一个实例。并且需要提供一个全局访问点来访问这个类的唯一实例。

有两种实现方式:懒汉式(延时获取)、饿汉式(及时获取)

 

http://www.lryc.cn/news/600526.html

相关文章:

  • 前端组件梳理
  • mount: /mnt/sd: wrong fs type, bad option, bad superblock on /dev/mmcblk1
  • 嵌入式硬件篇---有线串口通信问题
  • GitHub的免费账户的存储空间有多少?
  • PHP语法高级篇(六):面向对象编程
  • vue子组件关闭自己的方式(事件触发)
  • React入门学习——指北指南(第三节)
  • Netty中DefaultChannelPipeline源码解读
  • 「iOS」——内存五大分区
  • 【C语言】深入理解C语言中的函数栈帧:从底层揭秘函数调用机制
  • RabbitMQ--消息丢失问题及解决
  • 【Vue2】结合chrome与element-ui的网页端条码打印
  • GRE和MGRE综合实验
  • 深入解析三大Web安全威胁:文件上传漏洞、SQL注入漏洞与WebShell
  • 字节跳动扣子 Coze 宣布开源:采用 Apache 2.0 许可证,支持商用
  • 2025.7.26字节掀桌子了,把coze开源了!!!
  • 服务器被网络攻击后该如何进行处理?
  • 守护汽车“空中升级“:基于HSM/KMS的安全OTA固件签名与验证方案
  • 解决使用vscode连接服务器出现“正在下载 VS Code 服务器...”
  • [硬件电路-91]:模拟器件 - 半导体与常规导体不一样,其电阻式动态变化的,浅谈静态电阻与动态电阻
  • C++高效实现AI人工智能实例
  • 2025年7月26日训练日志
  • Arthas的使用
  • ultralytics yolov8:一种最先进的目标检测模型
  • 第十三篇:Token 与嵌入空间:AI如何“阅读”人类的语言?
  • Qt 线程同步机制:互斥锁、信号量等
  • 【电赛学习笔记】MaxiCAM 的OCR图片文字识别
  • 数据库HB OB mysql ck startrocks, ES存储特点,以及应用场景
  • Django5.1(130)—— 表单 API一(API参考)
  • JavaScript里的reduce