C#的泛型和匿名类型
一、C#的泛型简介
泛型是一种允许你延迟编写类或方法中的数据类型规范,直到你在实际使用时才替换为具体的数据类型【简单的说:泛型就是允许我们编写能够适用于任何数据类型的代码,而无需为每种特定类型重写相同的代码】(T是类型参数,起到站位符的作用,编译时被真正的类型替代)。
序号 | 泛型的特性说明 |
1 | 泛型有助于开发人员最大限度的重用代码、保护类型的安全性和提高性能 |
2 | 开发人员可以创建自己的【泛型接口】【泛型类】【泛型方法】【泛型事件】【泛型委托】 |
序号 | 泛型的优点 | 说明 |
1 | 类型安全 | 泛型确保我们在实际代码中使用的都是正确的数据类型【可在编译时捕获到错误来确保类型安全】 |
2 | 代码重用 | 泛型可以让我们只用编写一次通用代码,就可用来处理各种不同数据类型(如各种方法重载) |
3 | 提高性能 | 泛型避免了不必要的类型转换【没有装箱拆箱的消耗】,使得程序运行更快 装箱和取消装箱 - C# | Microsoft Learn C#基础:理解装箱与拆箱 C# 装箱和拆箱 |
4 | 灵活性 | 可以创建泛型接口、类、方法和委托内容,可处理我们选择的任何类型 |
《1》【泛型约束】主要是用于告知编译器类型参数必须具备的功能(在没有任何约束的情况下,类型参数可以是任何类型。 编译器只能假定 System.Object 的成员,它是任何 .NET 类型的最终基类); 《2》使用泛型约束的原因是【约束指定类型参数的功能和预期】( 声明这些约束意味着你可以使用约束类型的操作和方法调用) | ||
序号 | 泛型约束 | 说明 |
1 | where T : struct | 表示类型参数必须是不可为 null 的值类型; 由于所有值类型都具有可访问的无参数构造函数(无论是声明的还是隐式的),因此 struct 约束表示 new() 约束,并且不能与 new() 约束结合使用。 struct 约束也不能与 unmanaged 约束结合使用 |
2 | where T : class | 类型参数必须是引用类型。 此约束还应用于任何类、接口、委托或数组类型 |
3 | where T : class? | 类型参数必须是可为 null 或不可为 null 的引用类型。 此约束还应用于任何类、接口、委托或数组类型(包括记录) |
4 | where T : notnull | 类型参数必须是不可为 null 的类型。 参数可以是不可为 null 的引用类型,也可以是不可为 null 的值类型。 |
5 | where T : unmanaged | 类型参数必须是不可为 null 的非托管类型。 unmanaged 约束表示 struct 约束,且不能与 struct 约束或 new() 约束结合使用。 |
6 | where T : new() | 类型参数必须具有公共无参数构造函数。 与其他约束一起使用时,new() 约束必须最后指定。 new() 约束不能与 struct 和 unmanaged 约束结合使用。 |
7 | where T : <基类名> | 类型参数必须是指定的基类或派生自指定的基类。 在可为 null 的上下文中,T 必须是从指定基类派生的不可为 null 的引用类型。 |
8 | where T : <基类名>? | 类型参数必须是指定的基类或派生自指定的基类。 在可为 null 的上下文中,T 可以是从指定基类派生的可为 null 或不可为 null 的类型。 |
9 | where T : <接口名> | 类型参数必须是指定的接口或实现指定的接口。 可指定多个接口约束。 约束接口也可以是泛型。 在的可为 null 的上下文中,T 必须是实现指定接口的不可为 null 的类型 |
10 | where T : <接口名>? | 类型参数必须是指定的接口或实现指定的接口。 可指定多个接口约束。 约束接口也可以是泛型。 在可为 null 的上下文中,T 可以是可为 null 的引用类型、不可为 null 的引用类型或值类型。 T 不能是可为 null 的值类型 |
11 | where T : U | 为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。 在可为 null 的上下文中,如果 U 是不可为 null 的引用类型,T 必须是不可为 null 的引用类型。 如果 U 是可为 null 的引用类型,则 T 可以是可为 null 的引用类型,也可以是不可为 null 的引用类型 |
12 | where T : default | 重写方法或提供显式接口实现时,如果需要指定不受约束的类型参数,此约束可解决歧义。 default 约束表示基方法,但不包含 class 或 struct 约束。 有关详细信息,请参阅default约束规范建议 |
13 | where T : allows ref struct | 此反约束声明 T 的类型参数可以是 ref struct 类型。 该泛型类型或方法必须遵循 T 的任何实例的引用安全规则,因为它可能是 ref struct |
某些约束是互斥的,而某些约束必须按指定顺序排列: 《1》最多可应用 《2》基类约束( 《3》无论哪种形式,都最多只能应用一个基类约束。 如果想要支持可为 null 的基类型,请使用 《4》不能将接口不可为 null 和可为 null 的形式命名为约束; 《5》 《6》 《7》 《8》 |
二、C#的泛型和匿名类型使用
2.1、泛型类示例
//泛型类定义【基础】
修饰符 class 类名<T>
{类代码
}
泛型引入了类型参数用来充当数据类型的占位符,如下是一个可用于任何数据类型的泛型类和方法示例:
/// <summary>
/// 箱子泛型类
/// </summary>
/// <typeparam name="T">T是类型参数,可以是C#支持的所有数据类型(如:string,int,double,bool等)</typeparam>
internal class Box<T>
{public T Value { get; set; }public Box(T value){this.Value = value; }public void Print(){Console.WriteLine($"【{Value}】属于【{Value?.GetType()}】类型");}}//Class_end/// <summary>
/// 测试【箱子泛型类】的部分示例
/// </summary>
private static void TestBox()
{Console.WriteLine("---创建一个存放string数据的箱子---");Box<string> strBox = new Box<string>("字符串箱子");strBox.Print();Console.WriteLine("---创建一个存放Int数据的箱子---");Box<int> intBox = new Box<int>(666);intBox.Print();Console.WriteLine("---创建一个存放Double数据的箱子---");Box<double> doubleBox = new Box<double>(777.88888);doubleBox.Print();}
运行结果如下:【可以看到我们创建的泛型Box类可以创建各种数据类型的内容并打印出来】
2.2、泛型方法示例
//泛型方法定义修饰符 void 方法名称<类型参数>(类型参数 t){}//多泛型方法修饰符 void 方法名称<类型参数1,类型参数2>(类型参数1 left, 类型参数2 Right){}//带约束的泛型方法修饰符 类型参数 方法名称<类型参数>(类型参数 left, 类型参数 Right) where 类型参数 : 约束{}
//定义一个泛型方法,且实现泛型的数学运算internal class TestMethod{public static T Add<T>(T left, T Right) where T : INumber<T>{return left + Right;}}//Class_end//测试泛型方法private static void Test(){ int res = TestMethod.Add(5,6);Console.WriteLine($"5+6={res}");double res2 = TestMethod.Add(5.55, 6.32);Console.WriteLine($"5.55+6.32={res2}");}
运行结果如下:
2.3、泛型接口示例
//泛型接口定义
修饰符 interface I接口名称<类型参数>
{类型参数 字段名称{ get; }void 方法名称1(类型参数 t); 类型参数 方法名称2();
}
使用泛型接口可在不同的类型中强制实施类型安全行为,且在不同类型之间强制实施一致行为,同时使代码保持灵活且可重用。
System.Collections.Generic 命名空间(C#所有泛型集合的接口和类) | Microsoft Learnhttps://learn.microsoft.com/zh-cn/dotnet/api/system.collections.generic?view=net-9.0 IComparer<in T>接口表示具体的比较方法;实现创建PeopleComparer继承IComparer泛型接口对People的年龄比较排序示例:
--定义两个数据类型比较的接口IComparer
public interface IComparer<in T>
{int Compare(T? x, T? y);
}internal class People {public string? Name { get; set; }public int Age { get; set; }}//Class_end--继承 IComparer接口并实现具体的比较方法
internal class PeopleComparer : IComparer<People>
{public int Compare(People? x, People? y){return x.Age.CompareTo(y.Age);}
}//Class_end//测试泛型接口
private static void TestGenericInterface()
{var Peoples = new List<People>{new People{Name="张三",Age=26 },new People{Name="李四",Age=29 },new People{Name="王五",Age=28 }};Peoples.Sort(new PeopleComparer());// Peoples.Sort(new PeopleComparer());foreach (var people in Peoples) { Console.WriteLine($"【{people.Name}】【{people.Age}】"); }
}
序号 | 协变和逆变 | 说明 |
1 | 协变 | 允许将更具体的类型(派生类型)分配给更常规的类型(基类型) |
2 | 逆变 | 允许将更常规的类型(基类型)分配给更具体的类型(派生类型) |
1、使用泛型类型时,协变和逆变允许灵活性,尤其是在将一种类型分配给另一种类型时。 它们有助于确保某些方案中相关类型之间的兼容性。 2、读取数据(如循环访问集合)时,协变非常有用。 在写入或处理数据(如将参数传递给方法)时,逆变非常有用。 协变和逆变 - C# | Microsoft Learn |
2.4、泛型委托示例
namespace TestConsole
{//定义泛型委托public delegate T1 MyDel<T1,T2>(T2 t2);internal class TestDel{public TestDel(){//注册委托1方法notify += MsgNotify;//注册委托2方法sendMsg += SendMsg;}//声明泛型委托1public MyDel<string,bool> notify;//编写泛型委托1的需要调用的方法private string MsgNotify(bool status){string res = "";if (status){Console.WriteLine($"---泛型委托1执行:状态是【{status}】---");res = "执行泛型委托1完成";}return res;}//声明泛型委托2public MyDel<int, string> sendMsg;//编写泛型委托2的需要调用的方法private int SendMsg(string msg){int res= 0;if (!string.IsNullOrEmpty(msg) && msg.Contains("sg")){var tmp = msg.Split("sg");Console.WriteLine($"---泛型委托2执行:【{tmp[1]}】开始发送到加密服务器---");res = 222;}return res;}}
}
/// <summary>/// 测试泛型委托/// </summary>private static void TestGenericDelegate(){TestConsole.TestDel testDel= new TestConsole.TestDel();//使用委托1string res1 = testDel.notify(true);Console.WriteLine($"使用委托1的结果是【{res1}】\n");//使用委托2int res2 = testDel.sendMsg("sg你好,我是客户端");Console.WriteLine($"使用委托2的结果是【{res2}】\n");}
执行结果:
2.5、匿名类型示例
序号 | 匿名类型特点【匿名类型主要用于临时数据结构,定义完整类是不必要的】 |
1 | 匿名类型是使用 new 运算符和对象初始值设定项创建的 |
2 | 匿名类通常使用隐式类型变量var声明 |
3 | 它们通常用于语言集成查询(LINQ)中,以返回对象的部分属性 |
注意: 《1》匿名类型允许创建具有只读属性的对象,且不用定义类【编译器为类型生成名称,且该名称在源码中无法访问;其中编译器会自行确定每个属性的类型】; 《2》匿名类型不能用作方法参数或返回类型; 《3》匿名类型只适用于方法范围内创建临时数据结构; |
//创建匿名对象
var tmp = new { Name = "匿名类型", msg = "测试" };
Console.WriteLine($"{tmp.Name} {tmp.msg}");
//创建匿名对象数组
var tmpObjArray = new[]{new { Name="AB床垫",Price=1600 },new { Name="鼠标",Price=169},new { Name="键盘",Price=199 },new { Name="显示器",Price=699 },};//使用linq语法对内容进行过滤var filterRes = from obj in tmpObjArraywhere obj.Price >= 200select new { obj.Name, obj.Price };foreach (var obj in filterRes){Console.WriteLine($"【{obj.Name}】【{obj.Price}】");}
序号 | 功能 / 特点 | 匿名类型 | 元组类型 |
1 | 类型 | 引用类型 (class ) | 值类型 (struct ) |
2 | 自定义成员名称 | 支持 | 支持 |
3 | 析构 | 不支持 | 支持 |
4 | 表达式树支持 | 支持 | 不支持 |
在匿名类型和元组类型之间进行选择 - .NET | Microsoft Learn |
三、参考资料
泛型类型参数 - C# | Microsoft Learnhttps://learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/generics/generic-type-parametersNew 约束 - C# reference | Microsoft Learn
https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/new-constraint泛型类和方法 - C# | Microsoft Learn
https://learn.microsoft.com/zh-cn/dotnet/csharp/fundamentals/types/generics委托和事件简介 - C# | Microsoft Learn
https://learn.microsoft.com/zh-cn/dotnet/csharp/delegates-overview
C# - 泛型:初学者的友好引导 - C# 高级教程 - W3schoolshttps://w3schools.tech/zh-cn/tutorial/csharp/csharp_generics
相关文章:
C#的泛型和匿名类型
一、C#的泛型简介 泛型是一种允许你延迟编写类或方法中的数据类型规范,直到你在实际使用时才替换为具体的数据类型【简单的说:泛型就是允许我们编写能够适用于任何数据类型的代码,而无需为每种特定类型重写相同的代码】(T是类型参数ÿ…...
ABP VNext + MongoDB 数据存储:多模型支持与 NoSQL 扩展
🚀 ABP VNext MongoDB 数据存储:多模型支持与 NoSQL 扩展(生产级实践) 目录 🚀 ABP VNext MongoDB 数据存储:多模型支持与 NoSQL 扩展(生产级实践)🎯 引言🧰…...
JETBRAINS IDE 开发环境自定义设置快捷键
Date: 2025-06-18 20:39:52 author: lijianzhan JetBrains简介 让它发生。 用代码。 在JetBrains,代码是我们的激情所在。自成立以来,我们一直致力于打造世界上最强大、最有效的开发工具。 1.JETBRAINS官网,可以在官网下载代码编辑器 2.进入…...
JAVA——泛型
泛型(Generics)是Java语言在JDK 5.0版本中引入的一种强大特性,用于在编译时提供更强的类型检查和类型安全。它允许程序员在定义类、接口和方法时使用类型参数(Type Parameters),从而实现类型参数化。通过泛…...
攻防演练:1.木马后门文件演练
为了防止 Linux 服务器上传木马后门文件,可以编写一个脚本,定期检查系统中的可疑文件、进程和权限。以下是一个示例脚本,用于检查常见的后门文件、异常进程和权限问题。 脚本功能 检查常见后门文件路径。检查异常 SUID/SGID 文件。检查异常进…...
c++ STL---vector使用
本文对STL---中的vector的使用是参考网站 vector - C Reference 的内容,该网站是外文的哦,大家可以尝试打开看看更深刻的理解。本文是抽取其中常使用,然后加上自己的是理解哦。 前言 vector其实是顺序表类模板的封装啊! 数据结构…...
windows标题栏显示奇怪的蓝色,怎么解决
背景 如下,非常奇怪,如果窗口是active状态就是蓝色的,为什么? 如果你遇到上述问题,可以这么解决: 右键点击桌面,选择 “个性化”, 滚动到下面,看到 “标题栏和窗口边…...
Kafka存储设计深度剖析:日志、索引与文件管理的底层奥秘
引言 在分布式消息系统领域,Kafka凭借卓越的性能与高可靠性占据重要地位,而这一切都离不开其精妙的存储设计。从消息的持久化存储到高效检索,从日志分段管理到数据清理策略,Kafka的存储架构设计巧妙,能够支撑海量消息…...
将多个Excel合并到一个Excel中的方法
今天遇到这么一个问题,需要将多个Excel表格中的数据汇总表,合并在一个Excel中,并且显示一致。 因此编写了以下代码来解决这个问题, 1.在Excel中按AltF11,快速调出命令控制台 2.工具栏选择插入——模块——将以下脚本…...
Debian配置Redis主从、哨兵
前言 Redis的下载安装可参考Centos安装配置Redis6.x,Centos和Debian的步骤基本类似,或自行在网上搜索相关资料 注意:远程连接需放开相应端口 主从 搭建一个一主二从的主从模式 处理conf文件 #进入redis所在目录 cd /tools/redis/redis6 …...
OpenSSL引擎 + PKCS11 + SoftHSM2认证
OpenSSL引擎 PKCS11 SoftHSM2 前言:金融级安全的基石 在金融、军工等高安全领域,硬件安全模块(HSM) 是保护加密密钥的黄金标准。本文将深度剖析HSM核心组件libpkcs11.so的工作原理,并手把手教你搭建基于SoftHSM2的…...
flex布局 项目属性
<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>flex布局 项目属性</title> <link href"css/k.css" rel"stylesheet" /> </head> <bod…...
流水表延迟处理方案设计
**### 流水表延迟处理方案设计 针对你的场景(流水表插入记录,当type4时需要1秒后处理),结合现有技术栈(JDK8、MySQL、定时任务、Redis、RabbitMQ),我推荐以下几种可行方案: 一、方…...
密室出逃消消乐小游戏微信流量主小程序开源
这个密室出逃消消乐小游戏采用了微信小程序的标准目录结构,包含以下核心功能: 游戏界面:6x6 的网格布局,随机生成不同类型的物品 游戏逻辑:交换相邻物品,消除三个或以上相同类型的物品 计分系统:…...
Docker 日志
Docker 日志是排查容器故障、监控运行状态的重要工具。下面从 日志查看命令、详解字段、日志驱动、最佳实践 四个方面给你详细解析。 一、最常用日志命令 1. 查看容器日志(默认 stdout、stderr) docker logs <container_name|container_id>2. 实…...
嵌入Linux快速入门第3篇
01_嵌入式Linux开发环境介绍 在Windows环境下的操作: 02_配置VMware使用双网卡之NAT网卡 虚拟机内部有两个网卡,一个是NAT网卡,另外一个是桥接网卡。NAT网卡用来保证Ubuntu可以上网,桥接网卡用来保证Ubuntu可以和开发板进行数据…...
详解鸿蒙Next仓颉开发语言中的全屏模式
大家好,今天跟大家分享一下仓颉开发语言中的全屏模式。 和ArkTS一样,仓颉的新建项目默认是非全屏模式的,如果你的应用颜色比较丰富,就会发现屏幕上方和底部的留白,这是应用自动避让了屏幕上方摄像头区域和底部的导航条…...
Oracle/MySQL/SqlServer/PostgreSQL等数据库的数据类型映射以及各版本数据类型情况说明
1 引言 近期工作聚焦于跨数据库系统的数据类型兼容性研究,旨在解决多源异构数据迁移、系统集成及版本升级中的类型映射难题。具体任务包括:1)建立主流数据库(如MySQL、Oracle、PostgreSQL、SQL Server等)的数据类型映射…...
新生活的开启:从 Trae AI 离开后的三个月
很久没有写文章了,想借着入职新公司一个月的机会,和大家唠唠嗑。 离职 今年2月份我从字节离职了,结束了四年的经历,当时离开的核心原因是觉得加班时间太长了,平均每天都要工作15,16个小时,周末…...
背包问题概论(01背包,完全背包,多重背包)DP
背包问题概论(01背包,完全背包,多重背包)DP 背包问题一种经典的组合优化问题,主要用于在有限的容量下选择物品以最大化总价值。它分为几种类型: ①:0/1背包问题:每种物品只能选择…...
攻克SQL审核“最后堡垒”!PawSQL首发T-SQL存储过程深度优化引擎
为什么存储过程审核那么难? 存储过程将数据操作逻辑固化在数据库层,一次编译、多次执行,既能大幅提升性能,也能通过权限隔离增强安全。然而,正因其逻辑复杂、分支众多,存储过程内部的 SQL 审核与优化常常成…...
Stable Diffusion 实战-手机壁纸制作 第二篇:优化那些“崩脸”和“马赛克”问题,让图像更加完美!
欢迎回来!在《StableDiffusion实战-手机壁纸制作》系列的第一篇中,我们成功完成了基础操作,制作出了令人炫目的手机壁纸。 今天,我们将进入一个更高阶的领域——优化处理。因为谁不想让生成的艺术品更完美呢?尤其是避免“崩脸”和“马赛克”这种让人抓狂的问题! 创作的路…...
Kafka消费者客户端源码深度解析:从架构到核心流程
在Kafka生态系统中,消费者客户端作为数据消费的入口,其设计与实现直接影响数据处理的效率和可靠性。本文将深入Kafka消费者客户端源码,通过核心组件解析、流程拆解与源码分析,揭示其高性能消费背后的技术奥秘,并辅以架…...
Linux进程间通信:从入门到精通(2)
嘿,小伙伴!今天我们来聊聊Linux系统中一个超级重要的话题——进程间通信(IPC)。看到"进程间通信"这个词,别急着打哈欠,这可是Linux内核中的"社交达人",让进程们能够愉快地交…...
从源码到生产:Apache 2.4.57 自动化安装实战指南(附脚本)
引言:为何选择源码安装 Apache? 在服务器运维场景中,源码编译安装 Apache HTTP Server 是实现精细化配置的重要方式。相比包管理器安装,源码安装可自定义模块组合、适配特定依赖环境,并精确控制版本。本文将通过自动化…...
CMake实践:指定gcc版本编译和交叉编译
目录 1.指定gcc版本编译 1.1.通过CMake参数来实现 1.2.使用 RPATH/RUNPATH 直接指定库路径 1.3.使用符号链接和 LD_LIBRARY_PATH 1.4.使用 wrapper 脚本封装 LD_LIBRARY_PATH 2.交叉编译 2.1.基本用法 2.2.工具链文件关键配置 2.3.多平台工具链示例 2.4.注意事项 2.…...
【MySQL基础】MySQL内置函数全面解析:提升你的数据库操作效率
MySQL学习: https://blog.csdn.net/2301_80220607/category_12971838.html?spm1001.2014.3001.5482 前言: MySQL提供了丰富的内置函数来帮助开发者高效地处理数据。这些函数覆盖了字符串操作、数值计算、日期时间处理、流程控制等多个方面。本文将全面…...
OpenCV CUDA模块设备层-----在GPU上计算两个uchar1类型像素值的反正切(arctangent)比值函数atan2()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 对输入的两个 uchar1 像素值 a 和 b,先分别归一化到 [0.0, 1.0] 浮点区间,然后计算它们的 四象限反正切函数。 函数原型…...
unity 半透明描线shader
效果如图 Shader "Custom/TransparentWithOutline_Fixed" {Properties{// 主材质属性_Color ("Main Color", Color) (1,1,1,1)_MainTex ("Base (RGB) Trans (A)", 2D) "white" {}_Glossiness ("Smoothness", Range(0,1)…...
react中使用antd的form表单去受控switch时初始值没有正确显示
解决方案 antd内api中有valuePropName熟悉 只需正常绑定当前元素触发事件即可...
01__QT的背景介绍和工程创建
一、QT软件的安装 1、qt的背景介绍 Qt 是一个跨平台的 图形界面库(重量级),1994年由罗威troll tech公司出品,它集成了网络、数据库、串口通信协议(RS232,蓝牙,NFC)、打印、PDF生成…...
Java Map 深度解析
一、HashMap 底层实现详解 1. 核心数据结构 HashMap 在 JDK 8 中的底层结构是 数组 链表 红黑树,其核心成员变量包括: transient Node<K,V>[] table;:哈希桶数组transient int size;:实际键值对数量int threshold;&…...
异地组网工具
目前手头上两台服务器(一台主力,一台有gpu用来跑点深度学习任务),两台pc(一台是主力,一台是便携碎片化时间随时赶工用); 之前组网的时候,用zerotiertailscale࿰…...
我们为什么要模拟
大约 25 年前,当我开始从事高速 PCB 设计时,速度很慢,层数少,介电常数和损耗角正切很高,设计裕量很宽,铜粗糙度无关紧要,玻璃编织样式也无关紧要。我们称电介质为“FR-4”,它们的特性…...
MySQL 三大日志:Redo、Undo 与 Binlog 详解
写在前面 关于三大日志,博主看了无数视频和文章,也是总结的非常精辟了! 在 MySQL 数据库的运行机制中,Redo Log、Undo Log 和 Binlog 起着至关重要的作用,它们各司其职,共同保障数据库的数据安全、事务一…...
JMeter-SSE响应数据自动化3.0
背景 此次因为多了一些需要过滤排除的错误(数量很少),还需要修改下JMeter的jtl文件输出数据(后续统计数据需要) 所以只涉及到JSR脚本的一些改动(此部分改动并不会影响到JMeter的HTML报告) 改动 主要通过设置JMeter中prev输出数据变量threadN…...
C#上位机通过WebApi访问WinCC
在智能工厂架构中,WinCC作为SCADA一级,负责着与上级MES和下级PLC及其他现场组件的联系。与下层通信,WinCC支持S7、MC、Modbus TCP、OPC等多种接口和协议。对上层通信,WinCC从7.5 SP2开始支持REST Api这种Web接口方式。 今天跟大家…...
【深度学习新浪潮】什么是端侧AI?
什么是端侧AI? 端侧AI的定义 端侧AI(Edge AI)是指在终端设备(如手机、智能家居、穿戴设备等)本地运行的人工智能技术,无需将数据上传至云端服务器,直接在设备端完成数据处理、模型推理和决策。其核心优势在于低延迟、高隐私性、减少网络依赖,尤其适合对实时性和数据安…...
Postman 的 Jenkins 管理 - 自动构建
目录 一、环境准备 创建 Postman 集合和环境 二、postman Postman 集合和环境并导出 1. 打开已完成并测试无误的 postman 项目脚本。 再次执行测试。 编辑2. 导出( 测试用例集、环境变量 两个文件)**“不 支 持 中 文”** —— 全部改成英文&a…...
HomeBrew MAC PRO 安装教程
1、检查xcode工具 这个东西一般是有的,命令后输入以下内容即可 xcode-select --install如安装,结果为: 2、安装HomeBrew 方式1(推荐) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebr…...
多模态大语言模型arxiv论文略读(129)
Task Success Prediction for Open-Vocabulary Manipulation Based on Multi-Level Aligned Representations ➡️ 论文标题:Task Success Prediction for Open-Vocabulary Manipulation Based on Multi-Level Aligned Representations ➡️ 论文作者:M…...
Android 实现 Toast 显示重叠问题,有效提升用户体验
Android 实现 Toast 显示重叠问题 在 Android 开发中,Toast 是一个非常常用的提示工具,能够为用户提供短暂的信息展示。然而,Toast 的默认实现中,存在一个体验上的问题,当多次触发 Toast 显示时,会导致多个…...
Spring Boot + MyBatis + Vue:构建高效全栈应用的实战指南
一、项目需求分析 假设我们需要开发一个简单的任务管理系统,用户可以通过该系统创建、查看和删除任务。以下是项目的基本需求: 用户管理:用户可以注册和登录系统。 任务管理:用户可以创建、查看和删除任务。 数据持久化&#x…...
语音情感识别:CNN-LSTM 和注意力增强 CNN-LSTM 模型的比较分析
摘要: 语音情感识别 (SER) 技术可帮助计算机理解语音中的人类情感,这在推进人机交互和心理健康诊断方面占据了关键地位。本研究的主要目标是通过创新的深度学习模型提高 SER 的准确性和泛化性。尽管它在人机交互和心理健康诊断等各个领域都很…...
Cursor Pro取消500次请求限制,无限用的体验更好了吗?
目录 前言 一、发生了什么?从"限量"到"无限"的升级 1.1 "顶配" Ultra 套餐的登场 1.2 Pro 套餐的"静默升级" 1.3 新旧方案对比 二、"无限"背后的体验:一个开发者的真实感受 三、Cursor 为何要…...
视频汇聚EasyCVR平台v3.7.2发布:新增全局搜索、播放器默认解码方式等4大功能
EasyCVR视频汇聚平台带着全新的v3.7.2版本重磅登场!此次升级,绝非简单的功能堆砌,而是从用户体验、操作效率以及系统性能等多维度进行的深度优化与革新,旨在为大家带来更加强大、稳定且高效的视频监控管理体验。 一、全局功能搜索…...
2025年AI热潮:开发一款聚合AI系统,包含AI对话、视频、数字人、办公、客服、剪辑为一体的ai智能系统有多强
前言,我们了解了网上比较火的ai平台,比如: 抖音豆包AI、百度AI、阿里巴巴AI、腾讯AI、华为AI、DeepSeek、ChatGPT、文心一言、通义千问 一、系统概述 本聚合AI系统是一个集AI对话、图片生成、视频生成、视频剪辑、数字人创作、音乐制作、办公…...
DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_项目里程碑示例(CalendarView01_22)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
AWS数据库迁移实战:本地MySQL零停机上云方案
一、迁移场景 本地环境:自建MySQL 5.7(数据量500GB),业务要求迁移停机时间<5分钟 目标架构: 二、迁移四步法 步骤1:环境准备(耗时30分钟) 1.1 创建Aurora MySQL # AWS CLI创…...
windows汇编
今天发现一个很好的视频,讲windows汇编/调试等。是个老太太讲的,但是讲的真好。 Create/Assemble/Link x64 Windows asm exe, Debugging Tools for Windows (WinDbg), stack shadow store. 照例边看边记录边实验。 1. install visual studio 2. instal…...