【从零开始入门unity游戏开发之——C#篇23】C#面向对象继承——`as`类型转化和`is`类型检查、向上转型和向下转型、里氏替换原则(LSP)
文章目录
- 一、`as`类型转化和`is`类型检查
- 1、`as` 关键字
- 使用场景:
- 语法:
- 示例:
- 特点:
- 2、`is` 关键字
- 使用场景:
- 语法:
- 示例:
- 特点:
- 3、总结
- 二、向上转型和向下转型
- 1、向上转型
- 示例:
- 2、向下转型
- 示例:
- 3、向下转型的安全性
- 使用 `is` 操作符:
- 使用 `as` 操作符:
- 4、总结
- 三、里氏替换原则
- 1、什么是里氏替换原则?
- 2、**为什么要遵循里氏替换原则?**
- 2.1 **程序更可靠**
- 2.2 **更容易维护**
- 2.3 **支持扩展**
- 3、**举个例子**
- 4、**总结**
- 专栏推荐
- 完结
一、as
类型转化和is
类型检查
在C#中,as
和is
是两种用于类型转换和类型检查的关键字,它们的作用和用法有所不同。下面是这两个关键字的详细介绍:
1、as
关键字
as
关键字用于进行类型转换,通常用于将一个对象转换为指定的类型。如果转换成功,返回转换后的对象;如果转换失败,返回 null
。
使用场景:
as
用于安全的类型转换,可以避免抛出异常。- 它通常用于
引用类型的转换
(包括接口转换),而不适用于值类型(如int
、double
等)。
语法:
object obj = someObject;
SomeClass objAsClass = obj as SomeClass;
如果 obj
是 SomeClass
类型的实例,objAsClass
将引用该实例;否则,它将是 null
。
示例:
class Animal { }
class Dog : Animal { }Animal animal = new Dog();
Dog dog = animal as Dog; // 成功转换,dog 不为 nullobject obj = "Hello";
string str = obj as string; // 成功转换,str 为 "Hello"int? num = obj as int?; // 转换失败,num 为 null
特点:
- 如果转换失败,
as
不会抛出异常,而是返回null
。 - 适用于引用类型和可空值类型(
Nullable<T>
)。
2、is
关键字
is
关键字用于检查对象是否可以转换为指定的类型,返回一个布尔值(true
或 false
)。如果对象是指定类型的实例,返回 true
,否则返回 false
。
使用场景:
is
常用于类型检查,在执行类型转换之前验证对象是否符合预期类型。- 适用于所有类型(
值类型
和引用类型
)。
语法:
if (obj is SomeClass) {// obj 是 SomeClass 类型
}
示例:
object obj = "Hello";if (obj is string) {Console.WriteLine("obj 是 string 类型" );
} else {Console.WriteLine("obj 不是 string 类型");
}if (obj is int) {Console.WriteLine("obj 是 int 类型");
} else {Console.WriteLine("obj 不是 int 类型");
}
在C# 7.0及更高版本中,is
关键字还可以在检查类型的同时进行类型转换。例如:
object obj = "Hello";
if (obj is string str) {Console.WriteLine($"字符串值: {str}");
}
特点:
is
在检查类型时,不会抛出异常。- 如果使用
is
进行类型检查后,成功匹配的类型可以直接赋值给变量(如上面的str
),避免了显式的转换。
3、总结
- 使用
as
来进行类型转换时,它不会抛出异常。如果转换成功,它会返回转换后的对象;如果转换失败,它会返回null
。 - 使用
is
来进行类型检查时,它会返回一个布尔值,可以在检查通过时直接进行类型转换,避免了额外的类型转换步骤。
这两者通常配合使用,以确保类型转换的安全性和准确性。
二、向上转型和向下转型
在 C# 中,向上转型和向下转型是涉及类型转换的两个概念,通常与类的继承和多态性相关。
1、向上转型
向上转型是指将一个派生类对象转换为其基类类型。由于派生类继承了基类的所有成员(字段、属性、方法等),因此,派生类对象可以被当作基类对象来使用。
向上转型是安全的,通常是不需要显式的类型转换,因为编译器会自动进行转换。
示例:
class Animal
{public void Speak(){Console.WriteLine("Animal speaks");}
}class Dog : Animal
{public void Bark(){Console.WriteLine("Dog barks");}
}class Program
{static void Main(){Dog dog = new Dog();// 向上转型Animal animal = dog; // Dog 转换为 Animalanimal.Speak(); // Animal 的方法// animal.Bark(); // 编译错误,因为 animal 是 Animal 类型,不能调用 Dog 的方法}
}
在这个例子中,dog
对象被向上转型为 Animal
类型。通过 animal
变量,我们只能访问 Animal
类中的成员,而无法访问 Dog
类特有的方法(如 Bark()
)。
2、向下转型
向下转型是指将一个基类类型的对象转换为派生类类型。向下转型需要显式进行,因为基类类型的变量可能包含多个不同的派生类实例,而编译器无法确定转换的安全性。
向下转型通常会涉及到检查运行时类型,因为如果对象的实际类型不是目标类型的实例,强制转换会引发运行时异常。
示例:
class Animal
{public void Speak(){Console.WriteLine("Animal speaks");}
}class Dog : Animal
{public void Bark(){Console.WriteLine("Dog barks");}
}class Program
{static void Main(){Animal animal = new Dog(); // 向上转型Dog dog = (Dog)animal; // 向下转型,显式转换dog.Bark(); // 可以调用 Dog 的方法// 以下代码会抛出 InvalidCastException 异常// Animal animal2 = new Animal();// Dog dog2 = (Dog)animal2; // 异常,因为 animal2 实际上不是 Dog 类型}
}
3、向下转型的安全性
为了避免 InvalidCastException
异常,可以使用 is
或 as
操作符进行安全的类型转换。
使用 is
操作符:
is
用于检查对象是否可以转换为指定的类型。如果可以,则返回 true
,否则返回 false
。
Animal animal = new Dog();
if (animal is Dog dog)
{dog.Bark(); // 安全地调用 Bark()
}
else
{Console.WriteLine("animal 不是 Dog 类型");
}
使用 as
操作符:
as
操作符会尝试将对象转换为指定的类型。如果不能转换,则返回 null
,而不会抛出异常。
先判断,在转换。(它比传统的强制转换相对来说要安全一点,因为传统的强制转换, 一旦转换失败的话,程序就会崩溃,那么使用as关键字,如果转换不成功,就转换成空类型)
Animal animal = new Dog();
Dog dog = animal as Dog; // 如果 animal 不是 Dog 类型,则 dog 为 null
if (dog != null)
{dog.Bark(); // 安全地调用 Bark()
}
else
{Console.WriteLine("animal 不是 Dog 类型");
}
4、总结
- 向上转型:将派生类对象转换为基类类型,编译器自动进行转换,通常是安全的。
- 向下转型:将基类对象转换为派生类类型,需要显式转换,可能会抛出
InvalidCastException
,因此需要使用is
或as
进行安全检查。
三、里氏替换原则
里氏替换原则(Liskov Substitution Principle,LSP)是面向对象设计中的五大原则之一,它在设计和实现继承体系时起着至关重要的作用。遵循里氏替换原则能确保系统的稳定性、扩展性和可维护性。
1、什么是里氏替换原则?
里氏替换原则是面向对象编程中一个非常重要的设计原则,它的意思是:
如果一个类是另一个类的子类,那么在程序中可以用子类的实例来替换父类的实例,而且程序的行为不会改变。
简单来说,里氏替换原则要求:你可以用子类(从父类继承的类)替换掉父类,而不会让程序出错
。
举个简单的例子:
假设你有一个父类 动物
,有一个方法 叫()
。然后你有一个子类 狗
,它也有 叫()
方法。当你把一个 狗
对象传给需要 动物
对象的函数时,这个函数依然能正常工作,不会因为传入了 狗
而出错。
2、为什么要遵循里氏替换原则?
2.1 程序更可靠
如果子类没有遵循里氏替换原则,程序可能会因为传入子类对象而出错。遵循这个原则,可以确保子类对象可以正常替代父类对象,程序不会崩溃或出现奇怪的行为。
2.2 更容易维护
如果每个子类都能正确替换父类,程序的结构更简单,修改一个部分时不会影响到其他地方,代码更加稳定。例如,你可以在不改变其他代码的情况下,换成不同的子类,程序依然能正常工作。
2.3 支持扩展
当你遵循里氏替换原则时,未来增加新的子类(比如 猫
继承 动物
)也会很容易,新的子类会和旧的代码兼容,不会引起问题。
3、举个例子
假设有一个程序需要打印出所有动物叫的声音:
class Animal {public virtual void MakeSound() {Console.WriteLine("Some sound");}
}class Dog : Animal {public override void MakeSound() {Console.WriteLine("Bark");}
}class Cat : Animal {public override void MakeSound() {Console.WriteLine("Meow");}
}void PrintSound(Animal animal) {animal.MakeSound();
}
在这个例子里,Dog
和 Cat
都继承自 Animal
,并且实现了 MakeSound()
方法。你可以把 Dog
或 Cat
传给 PrintSound()
,程序依然会正常工作。
如果里氏替换原则被破坏,比如 Dog
类修改了父类的行为,导致无法在 PrintSound()
中正常工作,那就说明没有遵循这个原则,程序可能会出错或表现得不对。
4、总结
- 里氏替换原则确保子类可以无缝替换父类而不破坏程序行为。
- 它让你的代码更稳定、容易维护和扩展。
- 你可以放心地使用不同的子类,而不必担心它们会影响到程序的其他部分。
专栏推荐
地址 |
---|
【从零开始入门unity游戏开发之——C#篇】 |
【从零开始入门unity游戏开发之——unity篇】 |
【制作100个Unity游戏】 |
【推荐100个unity插件】 |
【实现100个unity特效】 |
【unity框架开发】 |
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
相关文章:
【从零开始入门unity游戏开发之——C#篇23】C#面向对象继承——`as`类型转化和`is`类型检查、向上转型和向下转型、里氏替换原则(LSP)
文章目录 一、as类型转化和is类型检查1、as 关键字使用场景:语法:示例:特点: 2、is 关键字使用场景:语法:示例:特点: 3、总结 二、向上转型和向下转型1、向上转型示例: 2…...
“魔法糖果盒的秘密:用朴素贝叶斯算法猜糖果颜色”
想象一下,你有一个神奇的糖果盒,这个糖果盒里有两种糖果:红色的和蓝色的。你闭上眼睛,从盒子里拿出一个糖果,然后尝一尝,你想知道这个糖果是红色的还是蓝色的。朴素贝叶斯算法就像是一个魔法规则࿰…...
使用“NodeMCU”、“红外模块”实现空调控制
项目思路 空调遥控器之所以能够实现对空调的控制,是因为它能够向空调发射出特定的红外信号。从理论上来说,任何能够发射出这种相同红外信号的红外发射器,都可以充当空调遥控器(这也正是手机能够控制多种不同品牌空调的原因所在&a…...
了解cuda的统一内存
1. CUDA 6中的统一内存 在CUDA 6中,从Kepler GPU架构(计算能力3.0或更高)开始,在64位Windows 7、8和Linux操作系统(内核2.6.18)上开始支持统一内存. 从CUDA 6开始,NVIDIA推出了CUDA平台历史上…...
MySQL索引
2.1 索引概述 2.1.1 介绍 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足 特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就…...
会话控制(cookie、session 和 token)
1. 介绍 所谓会话控制就是 对会话进行控制HTTP 是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端, 无法区分用户,而产品中又大量存在的这样的需求,所以我们需要通过 会话控制 来解决该问题。 常见的会话控制…...
stm32 rtc 详解
目录 L151 RTC 唤醒代码 方式一 通过 RTC Alarm Interrupt:(基本和F1系列一样): L151 RTC 唤醒代码 方式二 通过 RTC WakeUp Interrupt F103VE RTC 闹钟唤醒代码 (103RC 没有闹钟中断): RTC(real time…...
D 咖智能饮品机器人:开启商业新篇
在科技迅猛发展的当下,智能机器人正逐步渗透到各个商业领域,D 咖智能饮品机器人便是其中的佼佼者,它的出现为饮品行业带来全新的发展契机,有望开启商业新篇。 从大环境来看,消费者对于饮品的需求日益多元化和个性化。他…...
使用FakeSMTP创建本地SMTP服务器接收邮件具体实现。
以下代码来自Let’s Go further节选。具体说明均为作者本人理解。 编辑邮件模版 主要包含三个template: subject:主题plainBody: 纯文本正文htmlBody:超文本语言正文 {{define "subject"}}Welcome to Greenlight!{{end}} {{def…...
重拾设计模式--模板方法模式
文章目录 一、模板方法模式概述二、模板方法模式UML图三、优点1代码复用性高2可维护性好3扩展性强 四、缺点五、使用场景六、C 代码示例1七、 C 代码示例2 一、模板方法模式概述 定义:定义一个操作中的算法骨架,而降一些步骤延迟到子类中。模板方法使得…...
二、windows环境下vscode使用wsl教程
本篇文件介绍了在windows系统使用vscode如何连接使用wsl,方便wsl在vscode进行开发。 1、插件安装 双击桌面vscode,按快捷键CtrlShiftX打开插件市场,搜索【WSL】点击安装即可。 2、开启WSL的linux子系统 点击左下方图标【Open a Remote Win…...
我们的电视Our tv 3.6.0安卓+TV 一款全新电视直播软件-内置稳定直播源
应用简介 我们的电视(ourtv)是一款完全无广告的电视直播软件,清晰度可选择高清,超清,蓝光等播放。安装即可使用,再也不用费劲去找各种不稳定的直播源了。 “我们的电视”播放线路(直播源&…...
批处理理解
初识批处理 如何批处理: 命名:.bat 方法:创建一个记事本文件,然后将其扩展改为.bat 批处理作用:自上而下成批处理每一条DOS命令,直到执行到最后一条。运行环境:当然是我们cmd了 回归我学过的…...
高效准确的PDF解析工具,赋能企业非结构化数据治理
目录 准确性高:还原复杂版面元素 使用便捷:灵活适配场景 贴心服务:快速响应机制 在数据为王的时代浪潮中,企业数据治理已成为组织优化运营、提高竞争力的关键。随着数字化进程的加速,企业所积累的数据量呈爆炸式增长…...
Go框架比较:goframe、beego、iris和gin
由于工作需要,这些年来也接触了不少的开发框架,Golang的开发框架比较多,不过基本都是Web"框架"为主。这里稍微打了个引号,因为大部分"框架"从设计和功能定位上来讲,充其量都只能算是一个组件&…...
【ETCD】【实操篇(三)】【ETCDCTL】如何向集群中写入数据
在分布式系统中,etcd 是一个高可用的键值存储,用于存储和共享配置信息、服务发现、协调等。向 etcd 写入数据可以通过多种方式进行,常见的方式是使用 etcd 提供的 HTTP API 或者通过客户端库来进行操作。 目录 一、使用EtcdCtl工具来写入数据…...
2025年春节档的《哪吒2》,光线传媒动画梦的关键一战
没想到《哪吒之魔童闹海》会以这种形式重回大众视野。 距离2025年春节还有不到两个月,春节档电影大战已经打响,原本市场还在猜测2024年频频“胎动”的《哪吒之魔童闹海》(以下简称《哪吒2》)会不会参与这场“神仙打架”ÿ…...
windows C#-实例构造函数
声明一个实例构造函数,以指定在使用 new 表达式创建某个类型的新实例时所执行的代码。 要初始化静态类或非静态类中的静态变量,可以定义静态构造函数。 如以下示例所示,可以在一种类型中声明多个实例构造函数: class Coords {pu…...
FPGA-PS端编程1:
目标 在小梅哥的zynq 7015上,完成以下目标: 读取 S1 按键的电平, 当 S1 按键为按下状态时,驱动 PS LED 以 1S 的频率闪烁(注意理解 1S 的频率闪烁和 1S的时间翻转两种描述之间的差别), 当 S1 释放后,停止…...
【JavaEE进阶】第一个Spring Boot程序
目录 🌴安装插件 🎄Spring Boot介绍 🌳Spring Boot项目创建 🚩创建Spring Boot项目 🏀jar 包下载不下来问题 🚩启动项目 🌲目录介绍 🚩src文件 🚩target文件 &…...
RunCam WiFiLink连接手机图传测试
RunCam WiFiLink中文手册从这里下载 一、摄像头端 1.连接天线(易忘) 2.打开摄像头前面的盖子(易忘) 3.接上直流电源,红线为正,黑线为负 4.直流电源设置电压为14v,电流为3.15A, 通…...
使用Chat-LangChain模块创建一个与用户交流的机器人
当然!要使用Chat-LangChain模块创建一个与用户交流的机器人,你需要安装并配置一些Python库。以下是一个基本的步骤指南和示例代码,帮助你快速上手。 安装依赖库 首先,你需要安装langchain库,它是一个高级框架&#x…...
地级市2011-2020数字经济 博士研究生自用数据
赵涛评价指标数据,具体指标见图片 参考文献: [1]赵涛,张智,梁上坤.数字经济、创业活跃度与高质量发展——来自中国城市的经验证据[J].管理世界,2020,36(10):65-76. 每百人移动电话数,是模仿赵涛的,指人均再➗100 数据来源,中国城…...
呼叫中心部门如何使用开源大模型智能呼叫中心,对接已有系统实现降本增效
呼叫中心部门如何使用开源大模型智能呼叫中心,对接已有系统实现降本增效 作者:开源大模型智能呼叫中心FreeIPCC 随着人工智能技术的快速发展,特别是大规模语言模型(LLM)的应用,企业可以通过将开源大模型与…...
Latex 转换为 Word(使用GrindEQ )(英文转中文,毕业论文)
效果预览 第一步: 告诉chatgpt: 将latex格式中的英文翻译为中文(符号和公式不要动),给出latex格式第二步: Latex 转换为 Word(使用GrindEQ ) 视频 https://www.bilibili.com/video/BV1f242…...
多态中虚函数调用问题
在多态中,一般通过虚函数表会调用子类重写的虚函数,然而,有一种情况调用的还是父类的虚函数,就是在父类的构造函数中调用的是父类的虚函数,无论子类是否重写。 #include <iostream> #include <list> #inc…...
【NLP 18、新词发现和TF·IDF】
目录 一、新词发现 1.新词发现的衡量标准 ① 内部稳固 ② 外部多变 2.示例 ① 初始化类 NewWordDetect ② 加载语料信息,并进行统计 ③ 统计指定长度的词频及其左右邻居字符词频 ④ 计算熵 ⑤ 计算左右熵 编辑 ⑥ 统计词长总数 ⑦ 计算互信息 ⑧ 计算每个词…...
windows服务器Oracle TNS 远程监听器中毒
修复Oracle TNS 监听器远程中毒漏洞 1.1 修改监听文件 如何快速找到listener.ora ? cmd输入 tnsping localhost 修改配置文件,路径以自己的实际路径为准,我都在D盘 listener.ora内容如下: #listener.ora Network Configuration F…...
GitLab的安装和使用
1.GitLab 环境说明 系统版本 CentOS 7.2 x86_64 软件版本 gitlab-ce-10.8.4 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能…...
常用的JVM启动参数有哪些?
大家好,我是锋哥。今天分享关于【常用的JVM启动参数有哪些?】面试题。希望对大家有帮助; 常用的JVM启动参数有哪些? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 JVM启动参数用于配置Java虚拟机(JVM)的运行时行为…...
MobaXterm 连接不上VMware 的Ubuntu 虚拟机
想在window11的笔记本上通过VMWare安装Ubuntu操作系统,但是在两个桌面见来回切换,十分的麻烦,于是通过远程服务访问客户端软件MateXterm来访问虚拟机的Linux系统,但是从CSDN上搜到的教程都没有成功,于是,尝…...
异步BUCK二极管损耗计算
异步BUCK工作原理 Q闭合时(Ton),输入电压Vin为电感L和输出电容Cout充电,同时为负载供电;Q断开时(Toff),电感L为负载供电,电流通过续流二极管D回流到电感L; 之…...
【WPF】把DockPanel的内容生成图像
要在WPF中将一个 DockPanel 的内容生成为图像并保存,可以按照与之前类似的步骤进行,但这次我们将专注于 DockPanel 控件而不是整个窗口。 DockPanel的使用 WPF(Windows Presentation Foundation)中的 DockPanel 是一种布局控件&…...
STM32定时器对象捕获功能测量市电频率
在很多嵌入式系统中,精确地测量外部信号的频率是一个常见需求,尤其是对于需要同步外部电源(如市电)的应用。市电频率(50Hz或60Hz)是电力系统中一个至关重要的参数。在许多场景下,特别是UPS&…...
[react]5、React脚手架
1、前端脚手架 1、Vue的脚手架:vue-cli 2、Angular的脚手架:angular-cli 3、React的脚手架:create-react-app 目前这些脚手架都是使用node编写的,并且都是基于webpack的,需要在电脑上安装node环境 脚手架的作用是帮助我…...
uni-app开发个人中心页面
目录 一:功能实现 二:功能实现 一:功能实现 个人中心主要展示用户的个人信息,订单信息以及其他模块信息包含收藏,我的地址,我的钱包等。页面分为三个部分,底部显示用户信息和个人设置等。中间部分显示订单信息可以点击查看订单列表,底部显示其他模块信息。 二:功…...
Ubuntu 20.04 卸载和安装 MySQL8.0
卸载 首先,检查一下系统安装的软件包有哪些,使用dpkg -l | grep mysql命令: 为了将MySQL卸载干净,这些文件都需要被删除。 在Ubuntu20.04系统下,卸载干净MySQL8.0以确保下一次安装不会出错,可以按照以下…...
【深度学习-论文】通俗易懂的理解多标签识别
文章目录 1. 文章主要内容2. 通俗易懂的理解多标签分类到底是如何实现的通俗易懂的多标签分类实现介绍实现步骤为什么这么做?小结论文题目:Rada r emitter multi-la bel recognition based on residual network 基于残差网络的雷达发射机多标签识别1. 文章主要内容 《基于残…...
“TA”说|表数据备份还原:SQLark 百灵连接助力项目部署验收
💬 南飞雁|应用开发工程师 有些重要项目的部署验收,会在生产环境完成,验收完成后,又需要把这部分数据清空。这时就需要对数据表进行备份和还原,虽然可以通过命令直接实现,但是有一些操作门槛&am…...
android studio方便快捷保存数据读取数据(SharedPreferences)
原理:会自动生成一个xml文件,然后保存参数。xml文件的名字就是要读取的文件的名字。可以创建多个这样的xml文件。(储存方式是键值对方式,一个名字 对应 一个值) 首先先创建两个对象 private SharedPreferences shar…...
31.设计模式
单例模式 比如工具类,进需要一个实例,即可以在各处处理。用以节省创建类对象的开销和内存的开销。 保证一个类只有一个实例,而客户可以从一个众所周知的访问点访问它。 实现一个简单的单例 在一个python文件中定义一个类,并创…...
RTOS之邮箱
邮箱 邮箱 (Mailbox) 服务是实时操作系统中一种常用的线程间通信机制。它提供了一种高效、低开销的消息传递方式,允许线程之间交换固定大小的数据。 1. 邮箱的应用场景 考虑一个简单的示例:线程 1 负责检测按键状态并将状态信息发送出去,线程…...
Linux setfacl 命令详解
文章目录 Linux setfacl 命令详解一、ACL 和 setfacl 简介二、基本语法三、常用操作1. 查看 ACL2. 为用户设置权限3. 为组设置权限4. 删除 ACL 条目5. 设置默认 ACL6. 递归设置 ACL 四、示例操作1. 创建示例目录和文件2. 设置 ACL3. 验证 ACL 五、注意事项六、总结 Linux setfa…...
OpenCV 学习记录:首篇
最近在学习机器视觉,希望能通过记录博客的形式来鞭策自己坚持学完,同时也把重要的知识点记录下来供参考学习。 1. OpenCV 介绍与模块组成 什么是 OpenCV? OpenCV (Open Source Computer Vision Library) 是一个开源的计算机视觉和机器学习软…...
Java游戏开发基础:从零开始制作一个简单的2D游戏
目录 游戏开发概述 开发工具 项目结构 1. 创建游戏窗口 2. 游戏面板 解释: 3. 玩家类 解释: 4. 障碍物类 解释: 5. 游戏循环与碰撞检测 总结 在现代游戏开发中,Java被广泛应用于创建各种类型的游戏,特别是…...
入门STL(map/multiset)
目录 编辑 1.map 输入 输出 样例 输入 输出 解题代码: 2.multiset 输入 输出 样例 输入 输出 解题代码: 留下你的足迹吧!谢谢。 1.map map函数是一个内置函数,它允许你对一个序列)的每个元素应用…...
【mysql】1205 -Lock wait timeout exceeded; try restarting transaction
问题: mysql8执行SQL提示下面错误: 1205 -Lock wait timeout exceeded; try restarting transaction 1205-超过锁定等待超时;尝试重新启动事务 可能的原因: 事务冲突:多个事务同时尝试修改同一行数据,导…...
【开源免费】基于SpringBoot+Vue.JS在线宠物用品交易网站(JAVA毕业设计)
本文项目编号 T 092 ,文末自助获取源码 \color{red}{T092,文末自助获取源码} T092,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
postman读取文件执行
要从文件获取的变量 text 在pre-request 中写从文件获取数据的脚本。脚本实现了,设置了text默认值,从文件读取text列,将text存入环境变量 //获取text参数 var text "济南天气"; if(data.text){ text data.text } pm.environment.…...
UDP系统控制器_音量控制、电脑关机、文件打开、PPT演示、任务栏自动隐藏
UDP系统控制器(ShuiYX) 帮助文档 概述 本程序设计用于通过UDP协议接收指令来远程控制计算机的音量、执行特定命令和其他功能。为了确保程序正常工作,请确认防火墙和网络设置允许UDP通信,并且程序启动后会最小化到托盘图标。 命令格式及说明 音量控制…...