【从零开始入门unity游戏开发之——C#篇29】C#泛型(T)和 泛型约束
文章目录
- 一、泛型
- 1、泛型是什么
- 2、泛型分类
- 2.1. **泛型类和泛型接口**
- 2.2. **泛型方法**
- 3、泛型类和接口
- 3.1 泛型类示例:
- 3.2 泛型接口示例:
- 3.3 泛型类接受多个类型参数:
- 4、泛型方法
- 4.1. **普通类中的泛型方法**
- 4.2. **泛型类中的泛型方法**
- 5、泛型的作用
- 6、总结
- 二、泛型约束
- 1、**基本的泛型约束**
- 2、各泛型约束详细讲解
- 2.1. **值类型约束(`struct`)**
- 2.2. **引用类型约束(`class`)**
- 2.3. **公共无参构造函数约束(`new()`)**
- 2.4. **类约束(`BaseClass`)**
- 2.5. **接口约束(`IInterface`)**
- 2.6. **另一个泛型约束(`T : U`)**
- 3、泛型约束的组合使用
- 4、总结
- 专栏推荐
- 完结
一、泛型
1、泛型是什么
泛型是通过类型参数化
来实现代码重用的机制。它允许你在编写类或方法时,使用类型占位符
(通常是一个字母),并在实际使用时指定具体的类型。泛型使得同一份代码能够处理多种类型,提高了代码的灵活性和可维护性。
2、泛型分类
2.1. 泛型类和泛型接口
// 泛型类的基本语法:
class ClassName<T> { }// 泛型接口的基本语法:
interface InterfaceName<T> { }
2.2. 泛型方法
// 泛型方法的基本语法:
ReturnType MethodName<T>(Parameters) { }
// 可以有多个泛型参数
ReturnType MethodName<T1, T2>(Parameters) { }
3、泛型类和接口
3.1 泛型类示例:
class TestClass<T>
{public T value;
}// 使用泛型类时指定类型
TestClass<int> t1 = new TestClass<int>();
t1.value = 10;
Console.WriteLine(t1.value); // 输出: 10TestClass<string> t2 = new TestClass<string>();
t2.value = "Hello";
Console.WriteLine(t2.value); // 输出: Hello
3.2 泛型接口示例:
interface ITestInterface<T>
{T Value { get; set; }
}class Test : ITestInterface<int>
{public int Value { get; set; }
}
3.3 泛型类接受多个类型参数:
class TestClass2<T1, T2, T3>
{public T1 Value1;public T2 Value2;public T3 Value3;
}TestClass2<int, string, float> test = new TestClass2<int, string, float>();
test.Value1 = 10;
test.Value2 = "Test";
test.Value3 = 3.14f;
4、泛型方法
4.1. 普通类中的泛型方法
class Test
{public void TestMethod<T>(T value){Console.WriteLine(value);}
}Test test = new Test();
test.TestMethod<int>(10); // 输出: 10
test.TestMethod<string>("Hello"); // 输出: Hello
4.2. 泛型类中的泛型方法
class TestClass<T>
{public void TestMethod<K>(K value){Console.WriteLine(value);}
}TestClass<int> test = new TestClass<int>();
test.TestMethod<string>("Test Method");
5、泛型的作用
-
相同逻辑处理不同类型的对象:泛型可以用来编写处理不同类型对象的相同逻辑的代码,避免重复编写相似的代码。
-
避免装箱拆箱:泛型可以避免值类型(如
int
)在集合类(如ArrayList
)中进行装箱拆箱操作,减少性能开销。
6、总结
- 泛型是一个类型占位符,在编写代码时并不指定具体类型,直到使用时再指定。
- 泛型的类型占位字母可以有多个,并用逗号分开。
- 泛型占位字母通常是大写字母(如
T
、K
、V
等)。 - 不确定泛型类型时,获取默认值,可以使用
default(T)
获取类型的默认值。 - 看到<>包括的字母,那肯定是泛型。
二、泛型约束
在 C# 中,泛型约束用于限制泛型类型参数必须满足的条件。这使得泛型代码更加灵活和类型安全,同时避免了某些运行时错误。通过泛型约束,可以确保泛型类型参数遵循特定的行为或者接口,增强代码的可预测性和可靠性。
1、基本的泛型约束
泛型约束是在泛型声明中通过 where
关键字定义的,基本的语法如下:
class ClassName<T> where T : Constraint
{// T 是满足 Constraint 的类型
}
2、各泛型约束详细讲解
2.1. 值类型约束(struct
)
- 该约束要求泛型类型参数是值类型,不能是引用类型。
- 常见的值类型有:
int
,float
,double
,struct
自定义值类型。
class Test1<T> where T : struct
{public T value;public void TestFun<K>(K y) where K : struct{// 只能传入值类型}
}// 使用示例
Test1<int> t1 = new Test1<int>();
t1.TestFun<float>(1.3f); // 可以传递float,因为float是值类型
2.2. 引用类型约束(class
)
- 该约束要求泛型类型参数是引用类型,可以是任何类、接口或委托类型。
class Test2<T> where T : class
{public T value;public void TestFun<K>(K y) where K : class{// 只能传入引用类型}
}// 使用示例
Test2<Random> t2 = new Test2<Random>();
t2.value = new Random();
t2.TestFun<object>(new object()); // 可以传递object,因为它是引用类型
2.3. 公共无参构造函数约束(new()
)
- 该约束要求泛型类型参数必须具有公共无参构造函数,可以在代码中使用
new()
创建实例。
class Test3<T> where T : new()
{public T value;public Test3(){value = new T(); // 创建T类型的实例}
}class Test1 { }Test3<Test1> t3 = new Test3<Test1>(); // Test1必须有公共无参构造函数
补充知识
:
类的无参构造函数知识点你可能已经忘记了,这里补充一下。
在 C# 中,默认情况下每个类都会有一个 隐式无参构造函数,如果你没有显式地定义构造函数。也就是说,在你声明一个空的类 Test1 时,它会自动获得一个无参构造函数,虽然你没有写出这个构造函数。
class Test1
{// 这里没有显式写构造函数
}
上面的代码实际上等价于:
class Test1
{// 默认无参构造函数public Test1() { }
}
如果你在类中显式定义了其他构造函数(例如带参数的构造函数),那么编译器 不会 自动生成无参构造函数。此时,如果你需要无参构造函数,必须显式地提供。
例如,以下代码就不会自动提供无参构造函数:
class Test1
{public Test1(int x) { } // 显式定义了带参数的构造函数
}
如果你希望仍然能够使用无参构造函数,你需要显式定义它:
class Test1
{public Test1() { } // 显式定义无参构造函数public Test1(int x) { } // 仍然可以有带参数的构造函数
}
2.4. 类约束(BaseClass
)
- 该约束要求泛型类型参数必须是某个类及其派生类。
class Test4<T> where T : Test1
{public T value;
}class Test3 : Test1 { }Test4<Test3> t4 = new Test4<Test3>(); // Test3是Test1的派生类
2.5. 接口约束(IInterface
)
- 该约束要求泛型类型参数实现某个接口。
interface IFly { }class Test4 : IFly { }class Test5<T> where T : IFly
{public T value;
}Test5<Test4> t5 = new Test5<Test4>(); // Test4实现了IFly接口
2.6. 另一个泛型约束(T : U
)
- 该约束要求泛型类型
T
必须是另一个泛型类型U
或其派生类。
class Test6<T, U> where T : U
{public T value;
}class Test4 { }Test6<Test4, object> t6 = new Test6<Test4, object>(); // Test4是object的派生类
3、泛型约束的组合使用
泛型约束可以组合使用,这样可以同时限制多个条件。多个约束用 where
关键字连接。
class Test7<T> where T : class, new() // T必须是引用类型并且有公共无参构造函数
{public T value;
}class Test8<T, K> where T : class, new() where K : struct // T需要满足引用类型并有构造函数,K是值类型
{public T value;public K key;
}
4、总结
- 泛型约束使得我们可以对泛型类型参数进行类型限制,从而避免运行时错误,增强类型安全。
- 常见的泛型约束包括:
class
,struct
,new()
, 类名、接口名以及其他泛型类型。 - 这些约束可以组合使用,确保泛型类型参数在特定的约束范围内。
通过合理使用泛型约束,开发者可以确保程序在不同类型数据处理时的一致性和安全性。
专栏推荐
地址 |
---|
【从零开始入门unity游戏开发之——C#篇】 |
【从零开始入门unity游戏开发之——unity篇】 |
【制作100个Unity游戏】 |
【推荐100个unity插件】 |
【实现100个unity特效】 |
【unity框架开发】 |
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
相关文章:
【从零开始入门unity游戏开发之——C#篇29】C#泛型(T)和 泛型约束
文章目录 一、泛型1、泛型是什么2、泛型分类2.1. **泛型类和泛型接口**2.2. **泛型方法** 3、泛型类和接口3.1 泛型类示例:3.2 泛型接口示例:3.3 泛型类接受多个类型参数: 4、泛型方法4.1. **普通类中的泛型方法**4.2. **泛型类中的泛型方法*…...
一个从oracle使用spool导出数据到kadb的脚本
1. dump_data.sh调用sql_dump.sh导出数据 2. load_data.sh将导出的数据加载至KADB 1. dump_data.sh #!/bin/bash begin_time$(date %Y%m%d -d -1 day) end_time$(date %Y%m%d) echo "数据导出日期:"$begin_time echo "数据导出日期:"$begin_time >>…...
两道数组有关的OJ练习题
系列文章目录 🎈 🎈 我的CSDN主页:OTWOL的主页,欢迎!!!👋🏼👋🏼 🎉🎉我的C语言初阶合集:C语言初阶合集,希望能…...
仿闲鱼的二手交易小程序软件开发闲置物品回收平台系统源码
市场前景 闲置物品交易软件的市场前景广阔,主要基于以下几个方面的因素: 环保意识提升:随着人们环保意识的增强,越来越多的人开始关注资源的循环利用,闲置物品交易因此受到了广泛的关注。消费升级与时尚节奏加快&…...
uni-app使用组件button遇到的问题
在HBuilder X工具中新建一个空白项目, 1、新建一个about页 然后在pages.json文件里加上路由 2、然后看下导航的方法,发现找不到navigateTo方法 参考:button | uni-app官网 第3行和第4行的代码倒是没问题的,第5行的代码有问题执行…...
halcon单相机+机器人*眼在手外标定心得
目的 得到相机坐标系下的点与机器人底座base的转换关系,camera_in_base 两个不确定的定量 1,相机与机器人底座base之间的相对位置是固定的,既camera_in_base 2,机械手末端与标定物 tool_in_obj是固定的 辅助确定量 工作台与相…...
为什么在多数据源的情况下,单数据源的自动配置类会失效?
在 Spring Boot 中,DataSourceAutoConfiguration 是单数据源情况下的默认自动配置类。当引入多数据源方案(例如 dynamic-datasource-spring-boot-starter)后,单数据源的自动配置机制会失效,原因主要在于多数据源自动配…...
Y3编辑器教程8:资源管理器与存档、防作弊设置
文章目录 一、资源管理器简介1.1 界面介绍1.2 资源商店1.3 AI专区1.3.1 AI文生图1.3.2 AI图生图1.3.3 立绘头像 二、导入导出2.1 文件格式2.2 模型导入2.2.1 模型制作后导出2.2.2 模型文件导入Y3编辑器2.2.3 Y3编辑器角色、装饰物模型要求 2.3 纹理导入2.4 材质贴图2.4.1 材质支…...
域名劫持污染可以拦截吗?
在当今数字化的时代,互联网已经成为人们生活、工作和学习不可或缺的一部分。然而,网络世界并非一片净土,域名劫持污染这一威胁如同潜藏在暗处的 “幽灵”,时刻困扰着网络的安全与稳定,也引发了人们对于其是否可以被有效…...
解决“SVN无法上传或下载*.so、*.a等二进制文件“问题
今天,在使用Subversion提交代码到服务器时,发现无法提交*.a、*.so等二进制文件,右击这些文件,发现其属性为ignores。 问题原因:SVN的配置文件里,屏蔽了*.a、*.so文件的上传与下载,并把这些…...
2024年河北省职业院校技能大赛云计算应用赛项赛题第2套(私有云)
#需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包…...
登山第十六梯:深度恢复——解决机器人近视问题
文章目录 一 摘要 二 资源 三 内容 一 摘要 深度感知是基于 3D 视觉的机器人技术的一个重要问题。然而,现实世界的主动立体或 ToF 深度相机经常会产生嘈杂且深度不完整,从而成为机器人性能的瓶颈。在这项工作中,提出了 一个基于学习的立体…...
【自动驾驶】3 激光雷达③
5 激光雷达点云检测模型 🦋🦋🦋CenterPoint是Anchor‐Free的3D物体检测器,以点云作为输入,将三维物体在Bird‐View下的中心点作为关键点,基于关键点检测的方式回归物体的尺寸、方向和速度。相比于Anchor‐…...
新手福音:有哪些比Zotero更友好的文献管理软件?
别找了,3个被夸上天的论文阅读神器,我都帮你测评好了,直接抄我作业!! Scholaread、Zotero和EndNote,这些工具在复杂的学术探索中给我点亮了一盏灯,那感觉棒极了! 虽然每个工具都不…...
消费导刊杂志社消费导刊杂志消费导刊编辑部2024年第41期目录
征稿启事 封2 轻工艺术 浅谈青瓷创作中的艺术审美 周水淼1-4 浅谈木雕艺术在红木家具创作中的应用 蒋宝良5-8 浅谈对唐卡艺术高技能人才培养的必要性 夏吾他9-12 龙泉宝剑锻造技艺 叶明13-16 传承吸纳,创造吐新——论越窑青瓷新时代的传承和创新路径 盛海尧17-20 浅析龙泉哥窑艺…...
Datawhale-AI活动2024.12.24
目录 一、番茄时钟(1)输入Prompt(2)创建 HTML 文件解析1:HTML结构解析2:计时器内容解析3:按钮区域解析4:脚本引用 (3)使用JavaScript实现时钟功能解析1&#…...
揭秘:薪酬绩效管理咨询公司收费标准
在当今这个竞争激烈的商业环境中,企业的人力资源管理变得尤为重要,尤其是薪酬绩效管理体系的构建与优化。一个合理的薪酬绩效管理制度不仅能激发员工的积极性与创造力,还能帮助企业实现战略目标,提升整体竞争力。然而,…...
适用于机器视觉应用的智能机器视觉控制平台
工控机在机器视觉系统设计中是不可或缺的核心组件,在机器视觉中发挥着至关重要的作用,其强大的计算能力、高度的稳定性和可靠性、实时性以及图像处理和识别能力,为机器视觉检测提供了有力支持。 Nuvis系列机器视觉控制平台是适用于现如今机器…...
leetcode hot100 LRU缓存
146. LRU 缓存 已解答 中等 相关标签 相关企业 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&…...
什么是DDoS攻击?如何防范DDoS攻击?
定义 DDoS(Distributed Denial of Service)攻击全称为分布式拒绝服务攻击。它是一种恶意的网络攻击手段,攻击者通过控制大量的计算机(这些计算机通常被称为“僵尸主机”或“肉鸡”),同时向目标服务器或网络…...
使用 Dash 构建交互式数据可视化应用
使用 Dash 构建交互式数据可视化应用 1. 什么是 Dash? Dash 是一个由 Plotly 开发的开源 Python 框架,用于快速构建交互式数据可视化应用。Dash 将前端(HTML、CSS 和 JavaScript)与后端(Python)无缝集成&…...
【Linux网络编程】第十五弹---传输层深度解析:端口号划分、UDP协议特性与TCP协议全面剖析(含连接管理、流量控制、拥塞控制等)
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、传输层 1.1、再谈端口号 1.1.1、端口号范围划分 1.1.2、认识知名端口号 1.1.3、两个问题 1.2、UDP …...
SQL语句整理五-StarRocks
文章目录 查看版本号:SPLIT:insert 和 update 结合 select:报错:1064 - StarRocks planner use long time 3000 ms in memo phase:字段增删改: 查看版本号: select current_version(); current…...
【GIS教程】使用GDAL实现栅格转矢量(GeoJSON、Shapefile)- 附完整代码
文章目录 一、 应用场景1、GeoJSON2、ESRI Shapefile3、GDAL 二、基本思路1、数据准备2、重投影(可选)3、创建空的矢量图层4、栅格转矢量 三、完整代码四、总结五、拓展(使用ArcGIS工具进行栅格转矢量) 一、 应用场景 TIFF格式的…...
美国加州房价数据分析02
5. 特征工程 5.1重构数据集 承接上文提到的相似度排名,去掉部分无关的特征。 train_set.corr()["median_house_value"].sort_values(ascendingFalse)为了提高模型训练后的鲁棒性,即防止过拟合,不建议删除关联度最低几项特征&#…...
[安徽省赛 2021]misc签到
给了一个图片,改成jpg格式,查看属性 发现备注 this_is_password 这可能是密码什么东西的 把图片拉到kali里面用用工具binwalk工具分离 发现了flag.txt文件 把压缩包拉到windows系统中 解压,输入密码 得到flag NSSCTF{ab32056rfanla12380a…...
LeetCode:1705. 吃苹果的最大数目(优先级队列 + 贪心 Java)
目录 1705. 吃苹果的最大数目 题目描述: 实现代码与解析: 优先级队列 贪心 原理思路: 1705. 吃苹果的最大数目 题目描述: 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果。在第 i 天&#x…...
MX3200显微尺寸测量仪
产品简介 MX3200显微尺寸测量仪将显微成像与传统影像测量相结合,实现了微小特征的大范围测量。配置电动塔台,可自动切换到不同的倍率,探测各种精密微观二维尺寸特征。尺寸测量功能丰富,可进行各种二维尺寸点、线、圆等的测量和形…...
VR 动感单车身心调适系统的功能与作用
如今,人们面临着来自各方的压力,国家重视国民身心健康,但人们在实际生活中却缺乏有效的身心调节方式。无论是久坐的白领,还是学业繁重的学生,都存在身体亚健康和心理压力大的问题。传统健身方式枯燥、心理咨询成本高且…...
LabVIEW伸缩臂参数监控系统
LabVIEW开发伸缩臂越野叉车参数监控系统主要应用于工程机械中的越野叉车,以提高车辆的作业效率和故障诊断能力。系统通过PEAK CAN硬件接口和LabVIEW软件平台实现对叉车作业参数的实时监控和故障分析,具有良好的实用性和推广价值。 系统组成 系统主要由P…...
Spring提供了很好事务管理机制
事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制 分类 主要分为编程式事务和声明式事务两种。 编程式事务 是指在代码中手动的管理事务的提交、回滚等操作,代码侵入性比较强,如下示例: try {//TODO so…...
Selenium 和 Playwright两大框架的不同之处
自动化测试工具百花齐放,其中 Selenium 和 Playwright 是两大热门框架,谁才是你的最佳选择?面对企业项目的真实需求,它们的差异究竟在哪儿? Selenium 和 Playwright 是两种流行的自动化测试工具,它们都被用…...
【计算机视觉】轮廓检测
一、轮廓检测 在计算机视觉中,轮廓检测是另一个比较重要的任务,不单是用来检测图像或者视频帧中物体的轮廓,而且还有其他操作与轮廓检测相关。 以下代码展示了如何使用 OpenCV 进行 图像阈值处理、寻找图像轮廓 和 绘制轮廓 的完整流程&…...
【Linux】深入Linux:GCC/G++编译器实用指南
Linux相关知识点可以通过点击以下链接进行学习一起加油!初识指令指令进阶权限管理yum包管理与vim编辑器 在Linux系统中,理解和掌握GCC/G编译器是开发者不可或缺的技能之一。本文将深入探讨它们的工作原理和实际运用,帮助读者更好地利用这些强…...
【未来编程:AI如何通过合成复用原则优化设计】
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 前言合成复用原则含义 继承复用含义UML图实现代码运行结果及分析优缺点 合成复用(我有这…...
【Rust自学】5.3. struct的方法(Method)
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 5.3.1. 什么是方法(Method) 方法和函数类似,也是用fn关键字进行声明,方法也有名称,也有参数ÿ…...
单片机 STM32入门
一、什么是单片机 单片机(Microcontroller Unit,MCU)是一种集成电路芯片,它将计算机的CPU、存储器(包括RAM和ROM)、输入/输出接口等集成在一个芯片上。单片机通常用于嵌入式系统,能够执行特定的…...
OneCode:开启高效编程新时代——企业定制出码手册
一、概述 OneCode 的 DSM(领域特定建模)出码模块是一个强大的工具,它支持多种建模方式,并具有强大的模型转换与集成能力,能够提升开发效率和代码质量,同时方便团队协作与知识传承,还具备方便的仿…...
学python还是学java?哪个相对来说比较容易上手?
在比较Python和Java哪个更容易上手时,可以从多个维度进行分析,包括语法简洁性、学习资源、应用领域、学习曲线等。 一、语法简洁性 Python:Python的语法简洁明了,更接近自然语言,易于理解和记忆。它使用缩进来表示代…...
C语言项目 天天酷跑(上篇)
前言 这里讲述这个天天酷跑是怎么实现的,我会在天天酷跑的下篇添加源代码,这里会讲述天天酷跑这个项目是如何实现的每一个思路,都是作者自己学习于别人的代码而创作的项目和思路,这个代码和网上有些许不一样,因为掺杂了…...
Windows 11 安装 Dify 完整指南 非docker环境
# Windows 11 安装 Dify 完整指南## 前置要求- Python 3.11 - Node.js 18 - PostgreSQL 14 - Redis for Windows - Git - Ollama (可选,用于本地模型)## 详细安装步骤### 1. 安装必要软件1. **Python 3.11**- 从 https://www.python.org/downloads/release/python-…...
MySQL变量
文章目录 MySQL变量系统变量查看系统变量设置系统变量 自定义变量用户变量局部变量 MySQL变量 MySQL变量分为系统变量和自定义变量 系统变量 系统变量有全局变量和会话变量 查看系统变量 #查看全局系统变量 show global variables; #根据条件查询全局系统变量 show global …...
Ubuntu离线安装Docker容器
前言 使用安装的工具snap安装在沙箱中,并且该沙箱之外的权限有限。docker无法从其隔离的沙箱环境访问外部文件系统。 目录 前言准备环境卸载已安装的Docker环境快照安装的Dockerapt删除Docker 安装docker-compose下载执行文件将文件移到 /usr/local/bin赋予执行权限…...
ensp 关于acl的运用和讲解
ACL(Access Control List,访问控制列表)是一种常用于网络设备(如路由器、交换机)上的安全机制,用于控制数据包的流动与访问权限。ACL 可以指定哪些数据包允许进入或离开某个网络接口,基于不同的…...
Linux(Centos 7.6)yum源配置
yum是rpm包的管理工具,可以自动安装、升级、删除软件包的功能,可以自动解决软件包之间的依赖关系,使得用户更方便软件包的管理。要使用yum必须要进行配置,个人将其分为三类,本地yum源、局域网yum源、第三方yum源&#…...
[WASAPI]音频API:从Qt MultipleMedia走到WASAPI,相似与不同
[WASAPI] 从Qt MultipleMedia 来看WASAPI 最近在学习有关Windows上的音频驱动相关的知识,在正式开始说WASAPI之前,我想先说一说Qt的Multiple Media,为什么呢?因为Qt的MultipleMedia实际上是WASAPI的一层封装,它在是线…...
什么是MVCC?
MVCC(多版本并发控制,Multi-Version Concurrency Control)是一种用于数据库管理系统中的并发控制的技术。它允许多个事务同时对同一数据进行读取和修改,而不会相互干扰,从而提高了数据库的并发性能。以下是对MVCC的详细…...
C/C++基础错题归纳
文章目录 第1天1.下面程序段的运行结果是:答案知识补充 2.当一个类A 中没有声明任何成员变量与成员函数,这时sizeof(A)的值是多少?答案知识补充 3.下面程序输出是什么?答案其他讲解 第1天 1.下面程序段的运行结果是: char C[5]{‘a’,’b’…...
Nginx 常用安全头
Web 应用中配置 HTTP 安全响应头是提升网站安全性的重要一步。合理配置 Nginx 的安全头,可以抵御常见的安全威胁(如 XSS、点击劫持、MIME 类型嗅探等),增强用户隐私保护和传输安全性。 常见的 HTTP 安全头及其作用 1. Content-Se…...
消息队列(一)消息队列的工作流程
什么是消息队列 首先,代入一个场景,我现在做一个多系统的集成,分别有系统A、B、C、D四个系统,A系统因为使用产生了业务数据,B、C、D需要使用这些数据做相关的业务处理和运算,最基本的做法就是通过接口通信…...