1_索引器

(1)索引器是C#中一个强大而实用的特性,允许像访问数组一样访问类的成员

(2)索引器:一种可以让我们使用索引来访问对象的一种方法,是一组get,set访问器,与属性类似,但不同,索引器使用索引运算符[]而非点运算符.访问

(3)格式:public 返回值类型,this[索引器数据类型 索引]

(4)获取数据使用get访问,获取数据时set执行

class ClassRoom{public string No { get; set; }private List<Student> students= new List<Student>();public void MyAdd(Student s){students.Add(s);}public Student this[int index]{ get{ Console.WriteLine("index="+index);return students[index];}  set{                Console.WriteLine("value=========" + value);students[index] = value;}}public Student this[string n]{get{/* for(int i = 0; i < students.Count; i++){if (students[i].Name == n){return students[i];}                              }return null;*/return students.Find(s => s.Name == n);}}
​}

2_接口

(1)接口:没有实现的合同,契约,规则,是定义一组成员,而不对成员进行实现的引用类型,只能被类和结构体所继承,类和结构体实现接口的时候,必须实现接口中定义的所有成员

(2)接口是一种规范,不具备存储数据和定义方法的能力,类和结构体继承这个接口就要以这个接口为准,进行一一实现,具体怎么实现由类和结构体决定

(3)接口:规则,指定应该有什么;类和结构体:实现规则,具体应该有什么

(4)接口一般以I开头:格式:interface 接口的名称{成员}

(5)接口成员不能加访问修饰符,方法不能有方法体

(6):的作用:类的继承、接口的实现

(7)类的实现中,可以拥有更多的成员,但不能少

(8)当父类已经实现了接口,当子类再次继承咸通的接口,子类可以不用实现接口成员,也可以重写

(9)当基类和接口拥有相同的属性名和方法的时候,派生类不需要自己实现,也可以使用new关键字重新实现

interface IPeople{string Name { get; set; }char Sex { get; set; }int Age { get; set; }}interface IStudnt{string StudentNo { get; set; }int Age { get; set; }
​}class People : IPeople, IStudnt{public string Name { get; set; }public string StudentNo { get; set; }public int Age { get; set; }public char Sex { get; set; }}//父类已经实现了接口,子类再次继承相同接口可以不需要实现接口成员,也可以重写,//当基类和接口中拥有同名的属性和方法的时候,派生类不需要自己实现,也可以使用new关键字重新实现class Student : People, IStudnt{//重新实现public new int Age { get; set; }}

3_多接口

(1)当一个类实现了多个接口的时候,如果多个接口拥有相同的属性,只需要实现一个即可

(2)如果多个接口拥有不同类型但数据名相同的属性,需要显示实现接口中的属性;显示实现接口,不需要也不能添加访问修饰符,访问这个成员的时候需要将对象标记为对应的接口类型

(3)因为方法可以重载,所以直接重载两个接口中的方法即可

internal class Program{static void Main(string[] args){Test test = new Test();//  test.CIA t1 = new Test();t1.C = 12;}}interface IA{string A { get; set; }string B { get; set; }int C { get; set; }void Fn(int v);}interface IB{string B { get; set; }string C { get; set; }string D { get; set; }void Fn(string v);}class Test : IA, IB{public string A { get; set; }//当一个类实现了多个接口的时候,如果多个接口拥有相同的属性,只需要实现一个即可public string B { get; set; }//如果多个接口拥有不同类类型但是名称相同的属性,需要显示实现接口中的属性//显式实现接口 不需要也不能添加访问修饰符  这个成员的访问,需要将对象标记为对应的接口类型int IA.C { get; set; }string IB.C { get; set; }public string D { get; set; }
​//因为方法可以重载,所有直接重载两个接口中的方法即可public void Fn(int v){}public void Fn(string v){}
​}

4_接口的继承

(1)一个类实现一个接口的时候,如果接口(B)继承了另一个接口(A),这个类就必须实现A和B里面的所有成员

(2)接口与抽象类的异同

①:相同点:1、抽象类和接口都不能实例化 2、都可以包含未实现的方法,有派生类实现

②:不同点:

抽象类可以包含非抽象方法,接口不能包含抽象成员

一个类只能继承一个抽象类,但可以实现多个接口

抽象类的派生类需要使用override覆写类的成员,接口派生直接覆写

抽象类包含访问修饰符,接口不能有访问修饰符

抽象类可以包含属性,方法字段;接口可以包含属性和方法

5_泛型

(1)泛型:不固定数据类型,广泛的类型,泛型可以让不同数据类型支持相同的业务逻辑

(2)默认情况下在定义方法时就需要指定类型,通过泛型可以把指定类型延迟到方法调用的时候

(3)泛型方法:在方法名后面添加<>,里面相当于类型的形参列表

(4)泛型的命名规范:以T开头的单词,尽量表达出这个类型的作用,如果使用一个单词作为方法,建议使用T

(5)泛型方法在调用的时候指定数据类型,方法的返回值也可以用泛型;再调用方法的时候,泛型的指定可以省略,C#会自动根据实参推断类型

Fn<int>(123);//明确23<T>的数据类型.
Fn<string>("aaaaa");
Fn<bool>(true);
//类型的指定是可以省略的,C#会自动根据实参推断类型
Fn(123);
Fn("4444");
​
public static void Fn<T>(T i)
{Console.WriteLine(i);
}
//返回值也可使用泛型
public static T Fn1<T>(T i, T[] arr)
{return i;
}
public static Test1 Fn2<Test1,Test2>(Test1 i, Test2[] arr)
{return i;
}
public static int Fn3<Test1, Test2>(Test1 i, Test2[] arr)
{return 1;
}   

6_泛型的使用

(1)泛型类:Cal3c<T> : ICalc<T>泛型接口中的泛型的类型,使用的是泛型类中定义的类型(即泛型是什么类型,接口就是什么类型)

(2)default 默认的,default(T)得到T的默认值

(3)泛型方法在调用的时候指定类型;泛型接口在实现的时候指定类型;泛型类实例化的时候指定类型

 class Cal3c<T> : ICalc<T>{public T Add(T a, T b){//return a + b;//报错,//T 未知类型,指所有的类型,并不是所有的数据类型都重载了+运算符,所以报错
​//default 默认的 default(T)得到T的默认值return default(T);}public T Sub(T a, T b){throw new NotImplementedException();}}

7_泛型的约束

(1)声明泛型方法,泛型接口,泛型类的时候,可以通过添加约束让这个泛型不那么广泛

(1)where T:struct 约束 T只能是值类型

public static void Fn2<T>(T v)where T:struct{}

(2)where T: calss 约束T只能是引用类型

 public static void Fn3<T>(T v) where T : class{}

(3)where T :new() 约束泛型必须是一个类,并拥有无参构造方法

public static void Fn4<T>(T v) where T : new(){}

(4)where T : Peopele 约束泛型只能是这个类或者这个类的子类

public static void Fn5<T>(T v) where T : People{}

(5)where T : IPeople 约束泛型必须是实现了这个接口类或者这个类的子类

public static void Fn6<T>(T v) where T : IPeople

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

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

相关文章

SQL-leetcode— 2356. 每位教师所教授的科目种类的数量

2356. 每位教师所教授的科目种类的数量 表: Teacher ----------------- | Column Name | Type | ----------------- | teacher_id | int | | subject_id | int | | dept_id | int | ----------------- 在 SQL 中&#xff0c;(subject_id, dept_id) 是该表的主键。 该表…

基于单片机温控风扇设计/PWM调速风扇/智能风扇

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 该设计基于单片机实现智能温控风扇系统&#xff0c;通过温度传感器实时监测环境温度&#xff0c;…

【datawhale组队学习】RAG技术 - TASK02

教程地址&#xff1a;https://github.com/datawhalechina/all-in-rag/ 感谢datawhale的教程&#xff0c;以下笔记大部分内容来自该教程 文章目录基于LangChain框架的RAG实现初始化设置数据准备索引构建查询与检索生成集成低代码&#xff08;基于LlamaIndex&#xff09;conda ac…

Mitt 事件发射器完全指南:200字节的轻量级解决方案

简介 Mitt 是一个轻量级的事件发射器库&#xff0c;体积小巧&#xff08;约 200 字节&#xff09;&#xff0c;无依赖&#xff0c;支持 TypeScript。它提供了简单而强大的事件发布/订阅机制&#xff0c;适用于组件间通信、状态管理等场景。 特点 &#x1f680; 超轻量级&…

数据库锁与死锁-笔记

一、概述 数据库是一个共享资源,可以供给多个用户使用。运行多个用户同时使用一个数据库的数据系统统称多用户数据库系统。例如,飞机订票数据库系统。在这样的一个系统中,在同一时刻并发运行的事务数可达数百上千个。 当多个用户并发地存取数据库时就会产生多个事务同时存…

渗透艺术系列之Laravel框架(二)

任何软件&#xff0c;都会存在安全漏洞&#xff0c;我们应该将攻击成本不断提高&#xff01;​**——服务容器与中间件的攻防博弈**​本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01;一、服务容器的"依赖注入陷阱"1.1 接口绑定的"影子服务"…

官网SSO登录系统的企业架构设计全过程

第一阶段&#xff1a;架构愿景与业务架构设计 (Architecture Vision & Business Architecture) 任何架构的起点都必须是业务目标和需求。 1.1 核心业务目标 (Business Goals) 提升用户体验&#xff1a;用户一次登录&#xff0c;即可无缝访问集团下所有子公司的官网和应用&a…

2025世界机器人大会:中国制造“人形时代”爆发

2025世界机器人博览会8月8日在北京亦庄开幕&#xff0c;主题为“让机器人更智慧&#xff0c;让具身体更智能”&#xff0c;汇聚全球200余家企业、1500余件展品&#xff0c;其中首发新品超100款&#xff0c;人形机器人整机企业参展数量创同类展会之最。 除了机器人本体外&#…

Oracle 库定期备份表结构元数据信息至目标端备份脚本

一、背景描述当前 xxx 项目 Oracle 11g RAC 库缺少 DG&#xff0c;并且日常没有备份&#xff0c;存在服务器或存储损坏&#xff0c;数据或表结构存在丢失风险&#xff0c;在和项目组同步后&#xff0c;项目组反馈可对该数据库定期备份相关结构信息&#xff0c;如存在数据丢失&a…

wps安装后win系统浏览窗口无法查看

前提需要有安装office软件&#xff0c;PDF一般默认是浏览器&#xff0c;如果设置浏览器不行&#xff0c;就安装Adobe Acrobat DC软件1、按winR键&#xff0c;输入regedit&#xff0c;进入注册表2、找到路径&#xff1a;\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Current…

Qt 中最经典、最常用的多线程通信场景

实现步骤创建工作类 (Worker)&#xff1a;在工作线程中处理数据的对象。创建线程对象 (QThread)&#xff1a;用来托管工作对象。连接信号槽&#xff1a;主线程 -> 工作线程&#xff1a;连接一个主窗口发出的信号到工作对象的槽&#xff0c;用于传递数据。工作线程 -> 主线…

【CV 目标检测】Fast RCNN模型①——与R-CNN区别

3.Fast RCNN模型 相比于R-CNN&#xff0c;Fast RCNN模型主要在以下三个方面进行了改进&#xff1a; 提高训练和预测速度 R-CNN首先从测试图中提取2000个候选区域&#xff0c;然后将这2000个候选区域分别输入到预训练好的CNN中提取特征。由于候选区域有大量的重叠&#xff0c;这…

Zookeeper学习

要精通 ZooKeeper&#xff0c;需要掌握其核心原理、数据模型、分布式协调机制、典型应用场景、运维管理与性能调优等方面的知识。以下是系统化的知识体系&#xff1a;✅ 一、ZooKeeper 基础原理ZooKeeper 是什么 分布式协调服务&#xff0c;提供一致性、高可用的元数据管理核心…

用TestComplete打造高效CI/CD测试流程

传统的UI测试往往受限于图形界面渲染&#xff0c;导致执行速度慢、资源占用高&#xff0c;难以适应持续集成/持续交付&#xff08;CI/CD&#xff09;管道的需求。自动化UI测试平台TestComplete的智能质量附加组件通过无头测试技术&#xff0c;为开发团队提供了一种更高效、更可…

C++ 浅拷贝 和深拷贝的知识点讲解

好问题 &#x1f44d;&#xff0c;这个就是理解 delete 的关键前置知识。 我从 C语言基础 出发&#xff0c;像教科书一样&#xff0c;从零讲给你听。1. 什么是“拷贝”&#xff1f; 在 C 中&#xff0c;当你有一个对象 A&#xff0c;然后写&#xff1a; Device_Info a; Device…

Arkts加载网页url的pdf发票黑屏问题

使用模拟器会闪退&#xff0c;连接真机预览正常import { HMRouter, HMRouterMgr, HMParamType, HMPageParam } from "hadss/hmrouter"; import { BaseTitle, RouterConstants } from "commonlib"; import { webview } from kit.ArkWeb; import { PDFView }…

使用 mongosh 设置 MongoDB 账号密码

可以使用 mongosh(MongoDB 6.0+ 的现代Shell)来设置账号密码。mongosh 是官方推荐的新一代MongoDB Shell工具,替代了传统的 mongo 命令。 【本人博文提到的ip均为随机生成的,不是实际的ip,仅供参考,如有雷同,纯属巧合】 使用 mongosh 设置 MongoDB 账号密码 1. 首先连…

HTML+CSS:浮动详解

在HTMLCSS布局中&#xff0c;浮动&#xff08;float&#xff09; 是一种经典的布局技术&#xff0c;用于控制元素在页面中的排列方式。它最初设计用于实现文字环绕图片的效果&#xff0c;后来被广泛用于复杂布局&#xff0c;但随着Flexbox和Grid的兴起&#xff0c;其使用场景有…

GPIO初始化及调用

下面把 HAL 库 和 标准外设库&#xff08;SPL&#xff09; 初始化 GPIO 点亮/熄灭 LED 的完整步骤、示例代码和常用 API 逐一说清楚。用例默认 PC13 接 LED&#xff08;蓝板常见&#xff1b;低电平点亮&#xff0c;高电平熄灭——若板子相反&#xff0c;只把写 1/0 对调即可&am…

【GPT入门】第48课 LlamaFacotory 合并原模型与LoRA模型

【GPT入门】第48课 LlamaFacotory 合并原模型与LoRA模型1.合并原模型与LoRA训练的增量模型2. 测试模型1.合并原模型与LoRA训练的增量模型 llamafactory-cli webui 执行合并 合并后模型大小 (base) rootautodl-container-b4b04ea4f2-b5ee47d1:~# du -sh /root/autodl-tmp/mod…