一文读懂WPF系列之依赖属性与附加属性
依赖属性与附加属性
- 依赖属性
- 对比C#属性
- WPF依赖属性(Dependency Properties)
- 优先级计算与值决策
- 回调与验证机制
- WPF 自带的依赖属性
- 自定义依赖属性
- 附加属性
- 本质与定义
- 与依赖属性的区别
- 附加属性的典型应用场景
- 自定义附加属性
- 注意事项
- 属性对比
- 小结
依赖属性
对比C#属性
首先传统CLR的属性是什么,它们由自动生成的 getter 和 setter 方法管理。例如:
public class Person
{public string Name { get; set; }
}
优点:简单、直接,适用于不需要高级功能的场景。
缺点:它的值是存储在对象的字段中,无法进行数据绑定、样式、动画等功能
WPF依赖属性(Dependency Properties)
那么在WPF中 属性的绑定赋值有很多复杂使用 比如数据绑定 样式绑定等高级功能,所以要有适配WPF技术中的 高级属性使用 也就是 依赖属性
- 定义与核心机制
依赖属性是 WPF 中基于 DependencyObject 类实现的一种特殊属性系统。它通过全局哈希表管理属性值,支持动态来源(如绑定、动画、样式等),并允许属性值继承和优先级控制。例如,Button 的 Background 属性可通过多种方式赋值(如直接设置、绑定数据或应用样式) - 核心特点
内存优化高效存储:依赖属性通过哈希表存储值,相同控件的相同属性仅保存一份默认值,减少内存消耗。
动态绑定支持:支持与数据源绑定,实现 UI 与业务逻辑的实时同步。
值继承与优先级:子控件可继承父控件的属性值(如 FontSize),且不同来源的值按优先级生效(如本地设置 > 样式 > 继承值)。
变更通知:通过 PropertyChangedCallback 回调响应属性值变化,常用于触发界面更新
优先级计算与值决策
既然依赖属性 应对高级使用 多种动态绑定支持 显示值在控件上最终呈现一个值 那肯定有优先级
优先级从高到低依次为:
- 动画值(如正在执行的动画效果)。
- 本地值(通过 SetValue 或XAML直接设置的值)。
- 绑定值(数据绑定的结果)。
- 样式与模板(通过 Style 或 ControlTemplate 设置的值)。
- 继承值(从父元素继承的值,如 FontSize)。
- 默认值(通过 PropertyMetadata 定义的默认值)
回调与验证机制
依赖属性支持通过回调函数实现动态控制和验证:
- 属性变更回调(PropertyChangedCallback):在值变化时触发,用于更新UI或执行逻辑(如重绘控件)。
- 强制值回调(CoerceValueCallback):强制调整值(例如限制数值范围),优先级高于动画。
- 验证回调(ValidateValueCallback):验证值的合法性,若无效则抛出异常
WPF 自带的依赖属性
WPF 中绝大多数控件的属性都是依赖属性,它们通过 DependencyProperty 实现,支持动态绑定、动画、样式等特性。以下是常见的内置依赖属性分类及示例:
- 布局与外观
Width/Height:控件的尺寸(如 Button 的宽高)
Background/Foreground:背景色和前景色(如 TextBox 的背景色)
FontSize/FontFamily:字体样式(支持继承父容器的字体设置) - 行为与交互
IsEnabled:控件是否可用(如禁用按钮)
Visibility:控件的可见性(支持 Collapsed、Hidden 等状态)
Command:绑定命令(如 Button 的点击事件绑定 MVVM 命令) - 数据绑定与模板
ItemsSource:列表控件的数据源(如 ListBox 的绑定集合)
Content:内容属性(如 Label 的显示文本)
特点:这些属性通过全局哈希表存储,仅保存非默认值,减少内存占用
自定义依赖属性
这个会结合 自定义控件文章 来讲解
这里就先给个 示例
主要步骤就是 定义控件 注册依赖属性DependencyProperty 包装clr 定义样式 和 布局使用
public class NumericBox : Control
{// 注册依赖属性(含验证)public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(double), typeof(NumericBox),new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,null, CoerceValue),ValidateValue);// CLR 包装器public double Value{get => (double)GetValue(ValueProperty);set => SetValue(ValueProperty, value);}// 强制值回调(限制范围)private static object CoerceValue(DependencyObject d, object value){return Math.Max(0, (double)value); // 确保值 ≥ 0}// 验证回调(拒绝非法值)private static bool ValidateValue(object value){return value is double && (double)value <= 100; // 最大值 100}
}<!-- Window.Resources中自定义样式 --><Style TargetType="{x:Type local:NumericBox}"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type local:NumericBox}"><!-- 模板内容(如文本框、增减按钮等) --><TextBlock Text="{Binding Path=Value, RelativeSource={RelativeSource AncestorType={x:Type local:NumericBox}}}"/></ControlTemplate></Setter.Value></Setter></Style><!-- 使用的布局地方local 使用 -->
<local:NumericBox Width="120" Margin="5,0" Value="{Binding dataItem.Id} />
附加属性
本质与定义
- 附加属性(Attached Properties)是一种特殊类型的依赖属性,允许将属性“附加”到其他非宿主类的对象上。例如,Grid.Row 属性由 Grid 类定义,但可附加到任何子控件上,用于指定其在网格中的行位置。
- 实现方式:通过 DependencyProperty.RegisterAttached 静态方法注册,并定义 Get 和 Set 静态方法作为访问器。
- 核心特点:
跨控件扩展:无需修改目标控件源码即可添加新属性(如为 TextBox 添加水印提示)。
全局性:可在任何继承自 DependencyObject 的对象上使用。
与依赖属性的区别
宿主差异:依赖属性定义在宿主类内部(如自定义控件的属性),而附加属性定义在外部类并附加到其他控件。
注册方法:依赖属性使用 Register,附加属性使用 RegisterAttached。
访问方式:附加属性通过静态 Get/Set 方法访问,依赖属性通过 CLR 包装器直接访问
附加属性的典型应用场景
- 布局控制
网格布局:Grid.Row 和 Grid.Column 属性由 Grid 类定义,附加到子元素以指定位置。
画布定位:Canvas.Left 和 Canvas.Top 控制子元素在画布中的坐标。 - 行为扩展
验证逻辑:为 TextBox 添加输入验证或水印提示。
动态样式:通过附加属性触发控件样式的动态变化(如高亮选中项)。 - 服务类场景
跨组件通信:定义服务类,通过附加属性传递全局状态(如用户权限或主题颜色)
自定义附加属性
也会结合自定义控件文章来讲解
这里就先给个 示例
主要步骤就是 定义控件 注册依赖属性DependencyProperty 包装clr 定义样式 和 布局使用
public static class GridHelper
{public static readonly DependencyProperty ShowBorderProperty = DependencyProperty.RegisterAttached("ShowBorder", typeof(bool), typeof(GridHelper), new PropertyMetadata(false, OnShowBorderChanged));public static bool GetShowBorder(DependencyObject obj) => (bool)obj.GetValue(ShowBorderProperty);public static void SetShowBorder(DependencyObject obj, bool value) => obj.SetValue(ShowBorderProperty, value);private static void OnShowBorderChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){if (d is Grid grid && (bool)e.NewValue){// 动态为每个子元素添加边框foreach (var child in grid.Children.OfType<FrameworkElement>()){var border = new Border { BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1) };Grid.SetRow(border, Grid.GetRow(child));Grid.SetColumn(border, Grid.GetColumn(child));grid.Children.Add(border);}}}
}<Grid local:GridHelper.ShowBorder="True"><Grid.RowDefinitions>...</Grid.RowDefinitions><Grid.ColumnDefinitions>...</Grid.ColumnDefinitions><Button Grid.Row="0" Grid.Column="0" Content="按钮" />
</Grid>
注意事项
- 命名规范
附加属性名称以 Property 结尾(如 ShowBorderProperty)。
Get/Set 方法需与属性名严格对应(如 GetShowBorder)。 - 性能优化
避免在回调函数中频繁操作 UI 元素,优先使用数据绑定。
合理设置默认值以减少初始化开销。 - 调试技巧
命名空间检查:确保 XAML 中正确引入附加属性所在的命名空间。
模板绑定:在自定义控件模板中使用 TemplateBinding 关联附加属性
属性对比
小结
- WPF依赖属性的访问机制通过全局存储、优先级计算和动态回调实现了高效灵活的特性。其核心优势在于支持数据绑定、动画、样式继承等复杂场景,同时通过优化存储和计算逻辑保证了性能
- 附加属性是 WPF 实现灵活 UI 扩展的核心机制,其核心价值在于解耦功能与控件,支持跨组件通信、动态布局等复杂场景。通过合理设计,开发者可以显著提升代码复用性和可维护性
相关文章:
一文读懂WPF系列之依赖属性与附加属性
依赖属性与附加属性 依赖属性对比C#属性WPF依赖属性(Dependency Properties)优先级计算与值决策回调与验证机制WPF 自带的依赖属性自定义依赖属性 附加属性本质与定义与依赖属性的区别附加属性的典型应用场景自定义附加属性注意事项 属性…...
1×1卷积与GoogleNet
11卷积 卷积核的尺寸等于1的卷积核 11卷积有什么用 1. 通道混合与特征转换 背景:在卷积神经网络中,输入数据通常有多个通道(例如RGB图像有3个通道,经过卷积层后通道数可能会增加)。不同通道的特征图可能包含了不同的…...
Handsontable 表格组件的使用
文章目录 1. 安装 Handsontable2. 创建一个基本表格3. 主要配置3.1、 data 数据3.2、 columns 指定列配置 4. Handsontable 高级功能4.1、 添加排序4.2、 过滤数据4.3、 选中行高亮4.4、 只读单元格4.5、 校验数据 5. Handsontable 与 Vue结合6. 总结 Handsontable 是一个强大的…...
消息中间件面试题
前言 本章内容来自B站黑马程序员java大厂面试题与小林coding 如有侵权立即删除 博主学习笔记,如果有不对的地方,海涵。 如果这篇文章对你有帮助,可以点点关注,点点赞,谢谢你! 1.通用篇 1.1 什么是消息…...
数据结构与算法--1.判断数组中元素是否有重复
在C语言中,我们可以使用类似的方法来实现判断数组中是否有重复值的功能。由于C语言没有内置的哈希集合(如Python的set或C的unordered_set),我们需要自己实现一个简单的哈希表或使用其他方法。 方法一:暴力法ÿ…...
硬件工程师面试常见问题(1)
第一问:单片机上电后没有运转,首先要检查什么? (1)单片机供电是否正常& 电路焊接检查 用万用表测量对应引脚的供电电压,检查对不对。 (2)单片机复位是否释放 用万用表测量复位引…...
测试100问:web测试和APP测试的区别
哈喽,大家好,我是十二,那今天要为大家分享的是高频面试题:web测试和 App测试的区别。 从功能测试方面来讲,web测试和 App测试在测试的流程以及测试用例的设计上是没有区别的,那主要的区别包含以下三个方面&…...
Leetcode 3518. Smallest Palindromic Rearrangement II
Leetcode 3518. Smallest Palindromic Rearrangement II 1. 解题思路2. 代码实现 题目链接:Leetcode 3518. Smallest Palindromic Rearrangement II 1. 解题思路 这一题是题目Leetcode 3517. Smallest Palindromic Rearrangement I的升级版本,其主要的…...
Golang|订单相关
文章目录 秒杀写库策略确保缓存的订单数据不丢失 秒杀写库策略 在我们的抽奖函数中,抽中奖品、减库存成功返回给前端后就应该生成订单写入数据库 但是这里有问题,我们的抽奖函数是支持高并发的,并发量大的情况下mysql无法支持这么大并发量的写…...
Python+Playwright:编写自动化测试的避坑策略
PythonPlaywright:编写自动化测试的避坑策略 前言一、告别 time.sleep(),拥抱 Playwright 的智能等待二、选择健壮、面向用户的选择器,优先使用 data-testid三、严格管理环境与依赖,确保一致性四、分离测试数据与逻辑,…...
P12130 [蓝桥杯 2025 省 B] 移动距离
P12130 [蓝桥杯 2025 省 B] 移动距离 - 洛谷 题目描述 小明初始在二维平面的原点,他想前往坐标 (233, 666)。在移动过程中,他只能采用以下两种移动方式,并且这两种移动方式可以交替、不限次数地使用: 水平向右移动,…...
关于 人工智能(AI)发展简史 的详细梳理,按时间阶段划分,涵盖关键里程碑、技术突破、重要人物及挑战
以下是关于 人工智能(AI)发展简史 的详细梳理,按时间阶段划分,涵盖关键里程碑、技术突破、重要人物及挑战: 字数:约2500字 逻辑结构:时间线清晰,分阶段描述技术突破、关键事件与挑战…...
Formality:Bug记录
相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 本文记录博主在使用Synopsys的形式验证工具Formality中遇到的几个Bug。 Bug复现 情况一 // 例1 module dff (input clk, input d_in, output d_out …...
react-07React提交表单数据调用同一方法(高阶函数,函数柯里化概念)
1.高阶函数与函数柯里化概念 高阶函数:符合其中之一,那该函数为高阶函数 1.A函数,接收的参数是一个函数,那么A就是高阶函数2.A函数,调用的返回值是一个函数,那么A就是高阶函数 常见的高阶函数:…...
js ES6箭头函数的作用
前置知识 1、箭头函数语法简洁,相较于传统的函数表达式,箭头函数的语法更为简洁,尤其适用于简单的函数。 2、解决this取向问题,在传统函数中,this 的值取决于函数的调用方式,这可能会导致一些难以理解和调…...
淘宝商品数据高并发采集方案:API 接口限流机制与分布式调用实战
一、引言 在电商领域,对淘宝商品数据进行采集是一项常见且重要的任务。随着业务规模的扩大,高并发采集需求日益凸显。然而,淘宝 API 接口存在限流机制,为了高效且合规地完成数据采集,需要采用分布式调用的策略。本文将…...
python爬虫 线程,进程,协程
0x00 线程 线程是一个执行单位,是在一个进程里面的,是共享进程里面的提供的内存等资源,使用多个线程时和使用多个进程相比,多个线程使用的内存等资源较少。进程像一座“房子”(独立资源),线程是…...
《忘尘谷》音阶与调性解析
一、音高与音名的对应关系 根据搜索结果及音乐理论,结合《忘尘谷》的曲谱信息,其音阶与调性分析如下: 调性判定 原曲调性为 D调(原曲标注为D调),但曲谱编配时采用 C调指法,通过变调夹夹2品&…...
实验一 HDFS的Shell操作
一、实验目的 熟悉HDFS Shell的语法格式,完成对HDFS上文件和目录的一系列操作 二、实验要求 2.1 练习dfs常用的子命令 ① -ls ② -du ③ -mv ④ -cp ⑤ -rm ⑥ -put ⑦ -cat ⑧ -help ⑨ -mkdir ⑩ -get 2.2通过Shell脚本定时采集数据到HDFS 三、实…...
安装SQLServer管理工具
1.回到安装SQLServer的页面,选择安装SQLServer的管理工具2.跳转官网下载 3.安装SSMS 4.安装中5.安装成功以后打开软件,输入信息连接数据库 也可以在本机通过证书链接选择Windows身份验证,就不需要输入账号密码,但只能在安装sql…...
从JSON到SQL:基于业务场景的SQL生成器实战
引言 在数据驱动的业务场景中,将业务需求快速转化为SQL查询是常见需求。本文将通过一个轻量级的sql_json_to_sql函数,展示如何将JSON格式的查询描述转换为标准SQL语句,并结合实际业务场景验证其功能。 核心代码解析 1. 代码实现 def sql_j…...
记录鸿蒙应用上架应用未配置图标的前景图和后景图标准要求尺寸1024px*1024px和标准要求尺寸1024px*1024px
审核报错【①应用未配置图标的前景图和后景图,标准要求尺寸1024px*1024px且需下载HUAWEI DevEco Studio 5.0.5.315或以上版本进行图标再处理、②应用在展开状态下存在页面左边距过大的问题, 应用在展开状态下存在页面右边距过大的问题, 当前页面左边距: 504 px, 当前页面右边距…...
蓝桥杯嵌入式十六届赛前复习总结与准备
一.软件使用 赛点是没有网络的,要自己下载原件与数据包,这里给大家一个演示 在updater Settings这里设置文件存放位置,为了方便查找和提交文件,建议在桌面建立一个文件夹来存放。 把赛点的芯片包复制到创建的文件夹然后解压缩 之…...
了解一下Unity的RenderQueue
在Unity中,场景里的每个物体都需要通过渲染管线绘制到屏幕上。渲染管线处理光照、材质、纹理等信息,最终决定物体的显示效果。但当场景中有多个物体时,它们的绘制顺序会直接影响画面结果,尤其是在涉及透明物体或特效时。这时&…...
使用CS Roofline Toolkit测量带宽
使用CS Roofline Toolkit测量带宽 工程下载:使用CS Roofline Toolkit测量带宽-案例工程文件,也可以按照下面的说明使用git clone下载 目录 使用CS Roofline Toolkit测量带宽0、Roofline模型理解1、CS Roofline Toolkit下载1.1、设置代理1.2、git clone下…...
第三篇:深入 Framer Motion Variants:掌握组件动画编排的艺术
🎯 前言 在动态交互主导的现代前端开发中,优雅的动画效果已成为提升用户体验的重要元素。Framer Motion 的 Variants(动画变体)功能,通过状态化管理和动画编排能力,让复杂动效的实现变得前所未有的高效。本…...
狂神SQL学习笔记四:基本的命令行操作
注:所有语句用 ; 结尾,– 单行注释,/* 多行注释 */ 连接数据库 mysql -uroot -p123456 --连接数据库查看所有的数据库 切换数据库 查看数据库中所有的表 显示数据库中所有表的信息 创建一个数据库 退出连接...
架构思维:缓存层场景实战_读缓存(下)
文章目录 Pre业务场景缓存存储数据的时机与常见问题解决方案1. 缓存读取与存储逻辑2. 高并发下的缓存问题及解决方案3. 缓存预热(减少冷启动问题) 缓存更新策略(双写问题)1. 先更新缓存,再更新数据库(不推荐…...
软件架构设计:MVC、MVP、MVVM、RIA 四大风格优劣剖析
MVC、MVP、MVVM 和 RIA 都是软件架构中常见的设计风格,以下是对它们的详细介绍: 一、MVC 架构风格(Model - View - Controller) 1.简介:MVC 架构风格将软件应用程序分为三个核心部分,通过这种划分来分离不…...
java基础课程-springmvc课程
一. 回顾MVC: tomcat是servlet容器, servlet实现方式: xml中配置: 二. 回顾servlet: 三. SpringMvc学习 3.1 springMvc搭建和讲解: jar包引入spring-webmvc即可。 核心:DispatcherServlet Spring的web…...
NLP高频面试题(四十二)——RAG系统评估:方法、指标与实践指南
1. 引言:RAG系统概述与评估挑战 检索增强生成(Retrieval-Augmented Generation,简称 RAG)是近年来自然语言处理领域的一个重要进展。RAG系统在大型语言模型生成文本的过程中引入了外部检索模块,从外部知识库获取相关信息,以缓解纯生成模型可能出现的幻觉和知识盲点。通过…...
Flutter学习 滚动组件(1):ListView基本使用
目录 一、ListView构造方法1.1 常规方法1.2 ListView.builder1.3 ListView.separated 二、自定义ListView样式和布局:三、ListView性能优化:总结: 一、ListView构造方法 主要以下几种方法: 常规方法,直接使用默认的构…...
处理 Flutter 没有反应
现象 有以下几种 VS Code 中 Initializing the Flutter SDK. This may take a few minutes. 会一直维持在这个右下角提示窗, 但是无后续动作 Flutter CMD flutter_console.bat 执行 --version 或者 doctor [-v] 没有任何输出, 命令卡住 解决办法 参考官方说明 管理员身份…...
java面向对象06:封装
封装 该露的露,该藏的藏 我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。 封装(数据的隐藏) 通常&#x…...
测试定时发布
测试定时发布 测试定时发布 测试定时发布 测试定时发布 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我…...
2025年4月15日 百度一面 面经
目录 1. 代理相关 从静态代理到动态代理 2. cglib可以代理被final修饰的类吗,为什么 3. JVM 体系结构 4. 垃圾回收算法 5. 什么是注解 如何使用 底层原理 6. synchronized和reentrantlock 7. 讲一下你项目中 redis的分布式锁 与java自带的锁有啥区别 8. post 请求和 ge…...
抖音卸载了ip属地还会更新吗?深度解析
近期,关于抖音IP属地显示功能的讨论热度持续攀升,许多用户提出疑问:如果卸载抖音APP,账号的IP属地还会继续更新吗?这一问题背后,既涉及平台算法的运作逻辑,也关乎用户对隐私保护的深层需求。本文…...
Spring IoC与DI详解:从Bean概念到手写实现
一、Spring Bean的概念与本质 1.1 什么是Bean? 在Spring框架中,Bean是一个由Spring IoC容器实例化、组装和管理的对象。Bean及其之间的依赖关系通过容器使用的配置元数据来定义。简单来说,Bean就是Spring容器管理的Java对象。简单来说&…...
【Qt】信号和槽
文章目录 信号和槽的概念信号和槽的使用链接信号和槽查看内置信号和槽通过 Qt Creator 生成信号槽代码 自定义信号和槽基本语法带参数的信号和槽 信号与槽的连接方式一对一一对多多对一 信号和槽的其他说明信号与槽的断开 使用 Lambda 表达式定义槽函数 信号和槽的概念 在 Qt 中…...
小事务架构下的业务完整性保障:基于业务处理记录与补偿机制的技术实现
随着微服务架构、事件驱动架构(EDA)和最终一致性理念的普及,传统的大事务管理方式被更细粒度的“小事务”所取代。在这种架构中,全局业务流程被拆解成多个局部事务节点,通过异步消息进行编排。这种解耦提高了可扩展性和…...
DELL电脑开机进入自检界面
疑难解答 - 如何解决开机直接进入BIOS画面 添加链接描述 一、DELL电脑开机自检提示please run setup program 未设置一天中的时间-请运行安装程序(Time-of-day not set - please run SETUP program) 配置信息无效-请运行安装程序(Invalid configuration information - ple…...
Spring Boot 微服务中集成 MyBatis-Plus 与集成原生 MyBatis 有哪些配置上的不同?
在Spring Boot 微服务中集成 MyBatis-Plus (MP) 与集成原生 MyBatis (MB) 在配置上的主要不同点。MyBatis-Plus 是在 MyBatis 基础上进行的增强,它兼容 MyBatis 的所有配置方式,并提供了更简洁、更强大的配置选项。 相同点: 基础数据源配置 (DataSource…...
最近准备写个Playbook,详细点的指导手册,作为后续的销售培训文件,也趁着这个机会整理下产品思路,尤其是对于UALink,UEC新的联盟规范的测试用例
# 最近准备写个Playbook,详细点的指导手册,作为后续的销售培训文件,也蹭这个机会整理下产品思路。随着产品线越来越多(其实也是越来越少),东西越来越杂,已经不是三言两语就能解释得清楚了。 其…...
Kimi-VL:开源多模态视觉语言模型的崭新突破
近年来,人工智能在多模态模型的领域取得了显著的进展,特别是在能够处理文本和视觉输入的模型方面。MoonshotAI团队近期开源发布了Kimi-VL模型,这一模型凭借其在视觉理解、推理和智能体任务中的优异表现,受到了广泛关注。与GPT-4o等…...
NLP专业技能2025
Linux: 熟练使用Linux操作系统,熟练使用Linux常用命令进行开发。 熟悉掌握shell脚本编程技术的使用,能够编写简单的Shell脚本并熟练使用shell脚本四剑客(find、sed、grep、awk)进行日志解析。 熟练使用Linux环境进行开…...
C++STL循环队列实现
核心概念 循环队列(Circular Queue),也称为环形队列,是一种特殊的队列数据结构。它通过将队列的首尾相连,解决了传统队列因出队操作导致的空间浪费问题(即“假溢出”),从而更高效地…...
YOLOv3实践教程:使用预训练模型进行目标检测
目录 简介环境准备获取预训练模型图像目标检测视频目标检测模型性能优化常见问题解答进阶学习路径 简介 YOLOv3(You Only Look Once version 3)是一种高效的实时目标检测算法,由Joseph Redmon和Ali Farhadi于2018年提出。与传统的目标检测…...
confluent-kafka入门教程
文章目录 官方文档与kafka-python的对比配置文档配置项 Producer代码示例Consumer代码示例 官方文档 confluent_kafka API — confluent-kafka 2.8.0 documentation Quick Start for Confluent Cloud | Confluent Documentation 与kafka-python的对比 对比维度confluent-ka…...
网络安全-Http\Https协议和Bp抓包
1. http协议,有请求必有相应, 请求协议, 响应协议; 2. 密码学加密机制及常用算法和常用名称说明: 算法 密钥 明文数据 密文; 加密算法分类和常用算法: 加密算法可以归结为三大类ÿ…...
TDengine 语言连接器(C#)
简介 TDengine.Connector 是 TDengine 提供的 C# 语言连接器。C# 开发人员可以通过它开发存取 TDengine 集群数据的 C# 应用软件。 .NET 版本兼容性 .NET Framework 4.6 及以上版本。.NET 5.0 及以上版本。 支持的平台 原生连接支持的平台和 TDengine 客户端驱动支持的平台…...