C#结构体,枚举,泛型,事件,委托--10
目录
一.结构体
二.特殊的结构体(ref struct):
三.枚举
四.泛型
泛型的使用:
1.泛型类:定义一个泛型类,使用类型参数T
2.泛型方法:在方法定义中使用类型参数
3.泛型接口
五.委托及泛型委托
委托
泛型委托
六.事件
事件:
泛型事件:使用泛型委托(如EventHandler)来声明事件,可以传递更具体的事件数据。
七.事件,委托,泛型结合使用
总结
一.结构体
定义:
struct关键字用于声明一个值类型.结构体适合表示轻量级对象,如坐标,复杂数等
特点:
- 值类型:数据存储在栈(Stack)上,变量直接包含数据值
- 不可继承:结构体不支持继承(无法被继承,也不能继承自其他类型,除了实现接口)
- 默认不可为空:值类型变量默认情况下不能为null(除非使用Nullable<T>)
- 内存效率:在栈上分配和释放,效率较高,适合小型数据结构
用法:
- 不适合过大的数据结构,否则会影响性能
- 结构体应设计为不可变(Immutability),即成员应尽量设为只读
代码示例:
public struct Point
{public double X { get; }public double Y { get; }public Point(double x, double y){X = x;Y = y;}
}
二.特殊的结构体(ref struct):
定义:
- ref struct是一种特殊的结构体,限制其只能在栈上分配,不能在堆上分配
特点:
- 仅限栈分配:ref struct实例不能被分配到托管堆上,保证了高性能的内存访问
- 无法装箱:不能转换为object类型,不能使用如泛型,接口等需要装箱的特性
- 用途限定:常用于需要高性能和低延迟的场景,例如Span<T>,ReadonlySpan<T>等类型
限制:
- 不能捕获到异步方法,迭代器或Lambda表达式中:因为这些场景中可能导致变量逃逸出栈
- 不能赋值给类型为
object
的变量 - 不能实现接口
代码示例:
public ref struct SpanWrapper
{private Span<byte> _buffer;public SpanWrapper(Span<byte> buffer){_buffer = buffer;}// 成员方法和属性
}
三.枚举
定义:enum关键字用于声明一个枚举类型,由命名常量的集合组成
特点:
- 值类型:枚举的底层类型是整型(默认是int),每个枚举成员都有一个关联的整数值
- 提高可读性:使用有意义的名称代替数字,提高代码的可读性和可维护性
- 可指定底层类型:可以显式指定底层类型,例如byte,short等
- 位标志(Flags):使用
[Flags]
属性可以让枚举表示位域,支持按位操作
代码示例:
public enum DaysOfWeek : byte
{Sunday = 0,Monday = 1,Tuesday = 2,Wednesday = 3,Thursday = 4,Friday = 5,Saturday = 6
}// 使用枚举
DaysOfWeek today = DaysOfWeek.Monday;
位标志代码示例:
[Flags]
public enum FileAccess
{Read = 1,Write = 2,Execute = 4
}// 组合权限
FileAccess readWrite = FileAccess.Read | FileAccess.Write; // 1|2=3
//同时拥有读和写的权限
四.泛型
定义:
- 泛型是C# 2.0引入的一个特性,允许在定义类,接口,方法和委托时,使用类型参数,从而实现代码的类型安全和重用性
优势:
- 类型安全:在编译时检查类型,防止由于类型不匹配导致的运行时错误。
- 性能提升:避免了装箱(boxing)和拆箱(unboxing)的开销。
- 代码重用:编写一次代码,可适用于多种数据类型。
泛型的使用:
1.泛型类:定义一个泛型类,使用类型参数T
定义泛型类:
public class GenericClass<T>
{private T _value;public GenericClass(T value){_value = value;}public T GetValue(){return _value;}
}
使用泛型类:
GenericClass<int> intInstance = new GenericClass<int>(10);
int intValue = intInstance.GetValue(); // intValue = 10GenericClass<string> stringInstance = new GenericClass<string>("Hello");
string stringValue = stringInstance.GetValue(); // stringValue = "Hello"
2.泛型方法:在方法定义中使用类型参数
定义泛型方法:
public class Utility
{public void Swap<T>(ref T a, ref T b){T temp = a;a = b;b = temp;}
}
使用泛型方法:
Utility utility = new Utility();
int x = 5, y = 10;
utility.Swap<int>(ref x, ref y); // 交换整数string s1 = "First", s2 = "Second";
utility.Swap<string>(ref s1, ref s2); // 交换字符串
3.泛型接口
定义一个泛型接口:
public interface IRepository<T>
{void Add(T item);T Get(int id);
}
实现泛型接口:
public class Repository<T> : IRepository<T>
{private List<T> _items = new List<T>();public void Add(T item){_items.Add(item);}public T Get(int id){return _items[id];}
}
五.委托及泛型委托
委托
定义:
- 委托是C#中的一种数据类型,它定义了一个方法的类型,使得方法可以作为参数传递。委托类似于函数指针,但它是类型安全的。
基本语法:public delegate 返回类型 委托名(参数列表);
定义委托:
public delegate int MathOperation(int a, int b);
使用委托:
public class Calculator
{public int Add(int a, int b) => a + b;public int Subtract(int a, int b) => a - b;
} public class Program
{// 定义一个委托类型public delegate int Operation(int x, int y);public static void Main(){Calculator calc = new Calculator();// 创建委托实例并指向Add方法Operation op = new Operation(calc.Add);Console.WriteLine(op(3, 4)); // 输出: 7// 改变委托指向Subtract方法op = new Operation(calc.Subtract);Console.WriteLine(op(10, 4)); // 输出: 6}
}
泛型委托
使用泛型参数的委托类型,增强了委托的灵活性和可重用性
常用的泛型委托:
Func<T1,...,TResult>:有返回值的委托,可有0到16个输入参数
Func<int, int, int> multiply = (a, b) => a * b;
int product = multiply(3, 4); // product = 12
Action<T1,...>:无返回值的委托,可有0到16个输入参数。
Action<string> display = message => Console.WriteLine(message);
display("Hello, World!"); // 输出:Hello, World!
Predicate<T>:返回bool
类型的委托,常用于条件判断。
Predicate<int> isPositive = number => number > 0;
bool check = isPositive(5); // check = true
自定义泛型委托:
public delegate TOutput Converter<TInput, TOutput>(TInput input);class Program
{static void Main(){Converter<double, int> doubleToInt = num => (int)num;int result = doubleToInt(3.14); // result = 3}
}
六.事件
定义:
- 事件是委托的特殊形式,用于在对象之间传递消息或通知.当对象的状态发生改变时,可以通过事件通知订阅者.事件是基于“发布-订阅”(Publish-Subscribe)模式的实现
基本语法:public event 委托类型 事件名;
事件:
定义委托和事件:
// 定义委托
public delegate void NotifyEventHandler(string message);// 定义发布者类
public class Publisher
{// 声明事件public event NotifyEventHandler Notify;public void DoSomething(){// 执行某些操作// 触发事件OnNotify("事件被触发.");}protected virtual void OnNotify(string message){// 检查是否有订阅者Notify?.Invoke(message);}
}
订阅事件:
// 定义订阅者类
public class Subscriber
{public void OnNotified(string message){Console.WriteLine($"Received message: {message}");}
}
使用事件:
Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber();// 订阅事件
publisher.Notify += subscriber.OnNotified;// 触发事件
publisher.DoSomething(); // 输出:Received message: 事件被触发.
泛型事件:使用泛型委托(如EventHandler<TEventArgs>)来声明事件,可以传递更具体的事件数据。
使用EventHandler<TEventArgs>:
// 定义事件参数类
public class ProgressEventArgs : EventArgs
{public int Percentage { get; set; }
}// 定义发布者类
public class Process
{// 声明泛型事件public event EventHandler<ProgressEventArgs> ProgressChanged;public void StartProcess(){for (int i = 0; i <= 100; i += 10){// 模拟处理过程// 触发事件OnProgressChanged(i);}}protected virtual void OnProgressChanged(int percentage){ProgressChanged?.Invoke(this, new ProgressEventArgs { Percentage = percentage });}
}
订阅泛型事件:
public class Listener
{public void Subscribe(Process process){process.ProgressChanged += OnProgressChanged;}private void OnProgressChanged(object sender, ProgressEventArgs e){Console.WriteLine($"Process is {e.Percentage}% complete.");}
}
使用泛型事件:
Process process = new Process();
Listener listener = new Listener();listener.Subscribe(process);
process.StartProcess();// 输出:
// Process is 0% complete.
// Process is 10% complete.
// ...
// Process is 100% complete.
七.事件,委托,泛型结合使用
代码示例:
// 定义泛型委托
public delegate void ValueChangedEventHandler<T>(object sender, ValueChangedEventArgs<T> e);// 定义泛型事件参数类
public class ValueChangedEventArgs<T> : EventArgs
{public T OldValue { get; set; }public T NewValue { get; set; }
}// 定义发布者类
public class ObservableProperty<T>
{private T _value;// 声明泛型事件public event ValueChangedEventHandler<T> ValueChanged;public T Value{get => _value;set{if (!_value.Equals(value)){T oldValue = _value;_value = value;OnValueChanged(oldValue, _value);}}}protected virtual void OnValueChanged(T oldValue, T newValue){ValueChanged?.Invoke(this, new ValueChangedEventArgs<T> { OldValue = oldValue, NewValue = newValue });}
}// 定义订阅者类
public class PropertyObserver<T>
{public void Subscribe(ObservableProperty<T> property){property.ValueChanged += OnValueChanged;}private void OnValueChanged(object sender, ValueChangedEventArgs<T> e){Console.WriteLine($"Value changed from {e.OldValue} to {e.NewValue}");}
}
使用示例:
ObservableProperty<string> nameProperty = new ObservableProperty<string> { Value = "Alice" };
PropertyObserver<string> observer = new PropertyObserver<string>();observer.Subscribe(nameProperty);
nameProperty.Value = "Bob"; // 输出:Value changed from Alice to Bob
总结
-
泛型(Generics):允许在类,接口,方法和委托中使用类型参数,提高了代码的类型安全性和重用性
-
委托(Delegate):是用于引用方法的类型,支持将方法作为参数传递.泛型委托增强了委托的灵活性
-
事件(Event):基于委托的发布-订阅机制,用于在对象间发送通知和消息.泛型事件可以传递特定类型的数据,使事件处理更加强大和类型安全
相关文章:
C#结构体,枚举,泛型,事件,委托--10
目录 一.结构体 二.特殊的结构体(ref struct): 三.枚举 四.泛型 泛型的使用: 1.泛型类:定义一个泛型类,使用类型参数T 2.泛型方法:在方法定义中使用类型参数 3.泛型接口 五.委托及泛型委托 委托 泛型委托 六.事件 事件: 泛型事件:使用泛型委托(如Event…...
MATLAB语言的语法糖
MATLAB语言的语法糖 在现代编程语言中,语法糖(Syntactic Sugar)是一个常见的概念,它指的是某种编程语言提供的语法,使得代码更加简洁易读,而不改变语言本身的功能。MATLAB作为一种广泛应用于科学计算、工程…...
前端开发:HTML常见标签
1.注释标签 注释不会显示在界面上 . 目的是提高代码的可读性 . ctrl / 快捷键可以快速进行注释 / 取消注释 . <!-- 我是注释 --> 2.标题标签 有六个 , 从 h1 - h6. 数字越大 , 则字体越小 <h1> hello </h1> //我们所写的csdn的格式中的标题一…...
《AI发展的三个关键视角:基础设施、开源趋势与社会影响》
基础设施在AI研究中至关重要,但往往被忽视 基础设施在AI研究中至关重要,但往往被忽视,这一观点可以从多个方面进行深入探讨: 1. 基础设施的定义 基础设施在AI研究中通常指的是支持研究和开发的硬件、软件、网络和数据管理系统。…...
eslint.config.js和.eslintrc.js有什么区别
eslint.config.js 和 .eslintrc.js 的主要区别在于它们所对应的 ESLint 版本和配置方法: 1. .eslintrc.js: 这是 ESLint v8 及更早版本使用的配置文件格式。 它使用层级式的配置系统。 现在被称为"旧版"配置格式 。 2. eslint.config.js&am…...
Open FPV VTX开源之默认MAVLink设置
Open FPV VTX开源之默认MAVLink设置 1. 源由2. 准备3. 连接4. 安装5. 配置6. 测试6.1 启动wfb-ng服务6.2 启动wfb-ng监测6.3 启动QGroundControl6.4 观察测试结果 7. 总结8. 参考资料9. 补充9.1 telemetry_tx异常9.2 DEBUG串口部分乱码9.3 PixelPilot软件问题 1. 源由 飞控图传…...
一学就废|Python基础碎片,OS模块
Python 中的操作系统模块提供了与操作系统交互的功能。操作系统属于 Python 的标准实用程序模块。该模块提供了一种使用依赖于操作系统的功能的可移植方式。os和os. path模块包括许多与文件系统交互的函数。 Python-OS 模块函数 我们将讨论 Python os 模块的一些重要功能&…...
新版本的IDEA如何解决Git分支显示为警告⚠<unknown>的问题
目录 问题再现 解决思路 首先我们要想到 这个分支有没有从远程代码仓库拉去下来 复习一下 git 命令 其次思考 最后思考 问题再现 这边我使用的是 IDEA 2024.3.3.1 Jetbrains 官网的最新版 同时也是官方账号登录 的 今天上 github 去拉项目到 本地 出现了分支不显示的问…...
HTML和CSS相关的问题,为什么页面加载速度慢?
页面加载速度慢是网站优化中一个常见的问题,可能由于多种原因,包括HTML和CSS的代码编写方式、资源的加载顺序、页面渲染的复杂性等。以下是一些常见的原因和优化方法,结合实际项目代码示例进行讲解。 1. 过多的资源请求 如果页面包含大量的…...
使用葡萄城+vue实现Excel
最终实现效果如下 包含增加复选框 设置公式 设置背景颜色等,代码实在太多 有需要可留言 第一步:创建表头 请使用官网提供的网址:在线 Excel 编辑器 | SpreadJS 在线表格编辑器 1.点击下方号,创建一个新的sheet页 默认新创建的she…...
【漫话机器学习系列】042.提前停止训练的优势(Early Stopping Advantages)
提前停止训练(Early Stopping)的优势 提前停止是一种有效的正则化技术,在训练模型时通过监控验证集的性能来决定训练的结束点,从而避免过拟合。以下是提前停止的主要优势: 1. 防止过拟合 提前停止通过在验证集性能开…...
【2024遥感应用组一等奖】基于风云四号卫星的小时级大气气溶胶和颗粒物监测
作品介绍 01 研究背景 人口和产业的增长和集聚,增加了污染物的排放,改变了污染物的扩散条件,导致中国区域空气污染严重,是目前可持续发展面临的重大挑战之一。其中细颗粒物(PM2.5)是国内主要的空气污染物,威胁居民的身心健康,影响城市生态系统中社会、经济和自然…...
Cesium加载地形
Cesium的地形来源大致可以分为两种,一种是由Cesium官方提供的数据源,一种是第三方的数据源,官方源依赖于Cesium Assets,如果设置了AccessToken后,就可以直接使用Cesium的地形静态构造方法来获取数据源CesiumTerrainPro…...
Spring-Cloud-Gateway-Samples,nacos为注册中心,负载均衡
背景:本想找个简单例子看下,无奈版本依赖太过复杂,花了点时间。记录下吧 使用Spring Cloud Gateway作为网关服务,Nacos作为注册中心,实现对子服务的负载均衡访问。简单例子。 环境要求:JDK1.8、nacos 1.3…...
Centos9 + Docker 安装 MySQL8.4.0 + 定时备份数据库到本地
Centos9 Docker 安装 MySQL8.4.0 定时备份数据库到本地 创建目录,创建配置文件启动容器命令定时备份MySQL执行脚本Linux每日定时任务命令文件内参数其他时间参数 AT一次性定时任务 创建目录,创建配置文件 $ mkdir -p /opt/mysql/conf$ vim /opt/mysql/…...
【开源免费】基于Vue和SpringBoot的英语知识应用网站(附论文)
本文项目编号 T 138 ,文末自助获取源码 \color{red}{T138,文末自助获取源码} T138,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
aws(学习笔记第二十四课) 使用sam开发step functions
aws(学习笔记第二十四课) 使用sam开发step functions 学习内容: 生成sam的step functions实例程序什么是SAM amazon Serverless Application ModelSAM程序结构SAM执行程序 1. 生成sam的step functions实例程序 参照文档 这里参照AWS的官方文档SAM amazon Serverl…...
RabbitMQ介绍与使用
RabbitMQ官网 RabbitMQ 介绍 RabbitMQ 是一个开源的消息代理和队列服务器,基于 AMQP(高级消息队列协议)标准,使用 Erlang 编程语言构建。它是消息队列(MQ)的一种,广泛应用于分布式系统中&#x…...
LeetCode 热题 100_腐烂的橘子(52_994_中等_C++)(图;广度优先遍历(队列))
LeetCode 热题 100_腐烂的橘子(52_994) 题目描述:输入输出样例:题解:解题思路:思路一(广度优先遍历(队列)): 代码实现代码实现(思路一…...
【数学】概率论与数理统计(五)
文章目录 [toc] 二维随机向量及其分布随机向量离散型随机向量的概率分布律性质示例问题解答 连续型随机向量的概率密度函数随机向量的分布函数性质连续型随机向量均匀分布 边缘分布边缘概率分布律边缘概率密度函数二维正态分布示例问题解答 边缘分布函数 二维随机向量及其分布 …...
《AI模型格局演变:Claude、Gemini Flash与OpenAI的技术角力》
Anthropic的Claude模型在通用聊天模型中表现优异,但在市场份额上仍落后于OpenAI Anthropic的Claude模型在通用聊天模型中的表现优异,主要体现在以下几个方面: 1. 技术优势 性能表现: Claude模型在处理复杂任务(如编程、自然语言…...
[0405].第05节:搭建Redis主从架构
Redis学习大纲 一、3主3从的集群配置: 1.1.集群规划 1.分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下: 2.每组是一主一从&#x…...
01、kafka知识点综合
kafka是一个优秀大吞吐消息队列,下面我就从实用的角度来讲讲kafka中,“kafka为何有大吞吐的机制”,“数据不丢失问题”,“精准一次消费问题” 01、kafka的架构组织和运行原理 kafka集群各个节点的名称叫broker,因为kaf…...
K8S集群常用命令
1,查看pod kubectl get pods -A 查看所有的pod kubectl get pods 这个只查看namespace为default下的pod,也就是只查看默认命名空间下的pod kubectl get pod -A -o wide 查看所有的pod,并且放出的信息更全(包含了pod的ip࿰…...
数据集-目标检测系列- 石榴 检测数据集 pomegranate >> DataBall
数据集-目标检测系列- 石榴 检测数据集 pomegranate >> DataBall DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(fre…...
【ubuntu24.04】配置ssh以root登录
ubuntu默认不能以root登录 SSH 访问 Ubuntu 时,root 用户登录提示 Access denied 的问题,通常是因为 Ubuntu 默认禁用了 root 用户通过 SSH 登录。这是出于安全性考虑的默认配置。原因分析 默认禁用 root 登录: 在 /etc/ssh/sshd_config 配置文件中,PermitRootLogin 默认…...
python学opencv|读取图像(二十九)使用cv2.getRotationMatrix2D()函数旋转缩放图像
【1】引言 前序已经学习了如何平移图像,相关文章链接为: python学opencv|读取图像(二十七)使用cv2.warpAffine()函数平移图像-CSDN博客 在此基础上,我们尝试旋转图像的同时缩放图像。 【2】…...
Python语言的编程范式
Python语言的编程范式探讨 引言 在当今的编程世界中,Python语言以其简洁、易读和强大的功能深受开发者的喜爱。作为一种多范式编程语言,Python支持多种编程风格,包括面向对象编程(OOP)、函数式编程和命令式编程等。每…...
JAVA多线程学习
文章目录 线程相关概念线程创建继承Thread类Runnable接口多个线程同时操作同一个对象测试:实现callable接口(了解)静态代理lamda表达式 线程状态线程停止线程休眠线程礼让 线程相关概念 线程:是进程的一部分,一个进程之内的线程之间共享进程的…...
【c语言】指针 (完结)
一、sizeof和strlen的对比 1、sizeof 前面我们在学习操作符的时候,我们学习了sizeof,知道其是计算变量所占内存的大小的,单 位是字节,如果操作数是数据类型的话,计算的就是这个类型的变量所占的内存空间的大…...
vue使用自动化导入api插件unplugin-auto-import,避免频繁手动导入
unplugin-auto-import是一个现代的自动导入插件,旨在简化前端开发中的导入过程,减少手动导入的繁琐工作,提升开发效率。它支持多种构建工具,包括Vite、Webpack、Rollup和esbuild,并且可以与TypeScript配合使用&…...
matlab函数讲解——randsample
在MATLAB中,randsample函数用于从一个给定的集合中随机选择样本。函数的基本用法是从指定范围内随机选择元素,具体用法如下: 用法 y randsample(n, k, true, w)参数说明 n: 整数,表示从1到n的集合中进行抽样。例如,…...
50_Lua垃圾回收
1.Lua垃圾回收机制概述 Lua采用了一种自动内存管理机制,称为垃圾回收(Garbage Collection, GC)。垃圾回收的主要目的是回收程序中不再被使用的内存,从而避免内存泄漏。Lua的垃圾回收器负责回收动态分配的对象,如函数、用户数据、表、字符串、线程、内部结构等。Lua的垃圾…...
【Python】数据容器:列表,元组,字符串,集合字典及通用操作
文章目录 一.序列1.1list列表定义常用操作列表的遍历 1.2tuple元组定义常见操作元组的遍历 1.3str字符串定义常见操作字符串的遍历 1.4序列常用操作——切片 二.set集合定义常见操作集合的遍历 三.dict字典定义常用操作字典的嵌套 *数据容器对比总结四.数据容器的通用操作4.1通…...
Wi-Fi Direct (P2P)原理及功能介绍
目录 Wi-Fi Direct (P2P)介绍Wi-Fi Direct P2P 概述P2P-GO(P2P Group Owner)工作流程 wifi-Direct使用windows11 wifi-directOpenwrtwifi的concurrent mode Linux环境下的配置工具必联wifi芯片P2P支持REF Wi-Fi Direct ÿ…...
系统看门狗配置--以ubuntu为例
linux系统配置看门狗 以 ubuntu 系统配置看门狗为例 配置看门狗使用的脚本文件,需要使用管理员权限来执行: 配置是:系统每 30S 喂一次狗,超过 60S 不进行投喂,就会自动重启。 1. 系统脚本内容: #!/bin/b…...
Mysql--基础篇--多表查询(JOIN,笛卡尔积)
在MySQL中,多表查询(也称为联表查询或JOIN操作)是数据库操作中非常常见的需求。通过多表查询,你可以从多个表中获取相关数据,并根据一定的条件将它们组合在一起。MySQL支持多种类型的JOIN操作,每种JOIN都有…...
44_Lua迭代器
在Lua中,迭代器是一种用于遍历集合元素的重要工具。掌握迭代器的使用方法,对于提高Lua编程的效率和代码的可读性具有重要意义。 1.迭代器概述 1.1 迭代器介绍 迭代器是一种设计模式,它提供了一种访问集合元素的方法,而不需要暴露其底层结构。在Lua中,迭代器通常以一个函…...
网络原理(三)—— 传输层 之 UDP 和 TCP协议
传输层 在传输层两大关键的协议就是UDP和TCP协议了,除此之外,还有别的传输层协议,本文章将介绍UDP和TCP协议,重点介绍TCP协议。 首先回顾TCP和UDP 的特点: UDP:不可靠传输,面向数据包…...
Swin Transformer模型详解(附pytorch实现)
写在前面 Swin Transformer(Shifted Window Transformer)是一种新颖的视觉Transformer模型,在2021年由微软亚洲研究院提出。这一模型提出了一种基于局部窗口的自注意力机制,显著改善了Vision Transformer(ViT…...
opencv进行人脸识别环境搭建
1. 构建人脸识别环境 1) 下载安装opencv 下载地址:Releases - OpenCV 参考博文:OpenCV下载安装教程(Windows)-CSDN博客 下载对应系统的opencv,如windows版,opencv-4.5.5-vc14_vc15.exe 2) 然后解压缩到…...
java小灶课详解:关于char和string的区别和对应的详细操作
char和string的区别与操作详解 在编程语言中,char和string是用于处理字符和字符串的两种重要数据类型。它们在存储、操作和应用场景上存在显著差异。本文将从以下几个方面详细解析两者的区别及常见操作。 1. 基本定义与存储差异 char: 定义:…...
计算机网络之---RIP协议
RIP协议的作用 RIP (Routing Information Protocol) 协议是一个基于距离矢量的路由协议,它在网络中用来动态地交换路由信息。RIP 是最早的路由协议之一,通常用于小型和中型网络中。它的工作原理简单,易于实现,但在一些大型网络中效…...
F#语言的文件操作
F#语言的文件操作 F#是一种功能性编程语言,运行在.NET平台上,特别适合处理并发和复杂的数据处理任务。在这篇文章中,我们将介绍F#语言中的文件操作,包括读取、写入和管理文件的基本方法。通过实例来帮助理解,适合初学…...
微信小程序开发设置支持scss文件
在微信小程序开发中,默认是不支持scss文件的,创建文件的时候,css文件默认创建的是wxss后缀结尾的,但是用习惯了scss的怎么办呢? 首先找到project.config.json文件,打开文件在setting下设置useCompilerPlug…...
【Excel笔记_3】execl的单元格是#DIV/0!,判断如果是这个,则该单元格等于空
在 Excel 中,可以使用 IF 函数来判断单元格是否是 #DIV/0! 错误,并将其替换为空值(即空字符串 "")。具体公式如下: IF(ISERROR(A1), "", A1)或者,如果只想判断 #DIV/0! 错误ÿ…...
51单片机入门基础
目录 一、基础知识储备 (一)了解51单片机的基本概念 (二)掌握数字电路基础 (三)学习C语言编程基础 二、开发环境搭建 (一)硬件准备 (二)软件准备 三、…...
设计模式 行为型 访问者模式(Visitor Pattern)与 常见技术框架应用 解析
访问者模式(Visitor Pattern)是一种行为设计模式,它允许你在不改变元素类的前提下定义作用于这些元素的新操作。这种模式将算法与对象结构分离,使得可以独立地变化那些保存在复杂对象结构中的元素的操作。 假设我们有一个复杂的对…...
stable diffusion 量化学习笔记
文章目录 一、一些tensorRT背景及使用介绍1)深度学习介绍2)TensorRT优化策略介绍3)TensorRT基础使用流程4)dynamic shape 模式5)TensorRT模型转换 二、TensorRT转onnx模型1)onnx介绍2)背景知识&…...
金融项目实战 04|JMeter实现自动化脚本接口测试及持续集成
目录 一、⾃动化测试理论 二、自动化脚本 1、添加断言 1️⃣注册、登录 2️⃣认证、充值、开户、投资 2、可重复执行:清除测试数据脚本按指定顺序执行 1️⃣如何可以做到可重复执⾏? 2️⃣清除测试数据:连接数据库setup线程组 ①明确…...