C# 如何实现对“属性”的扩展
目录
- 一、为什么要扩展属性
- 二、如何做?
一、为什么要扩展属性
属性是一个类的特征,随着开发的不断升级,这种特征可能在一直变化,有时候为了向下兼容,一般属性的数量都是直接递增的。
例如:一个Person类,他在项目初期,只有一个属性Age,可随着项目升级,可能需要Name,Address,甚至Price。
public class Person
{/// <summary>/// 年龄/// </summary>public int Age { get; set; }//常规属性
}
那么常规做法就是继承,然后在子类添加属性。亦或者修改源码,重新编译。
无论哪一种都有很大的麻烦事。
继承,会让显式的Person类无法使用声明到子类的属性,到时候必须进行强制转换,而一旦继承分支多起来的话,将非常糟糕。
而重新编译,带来的问题就更大了,总不能把属性都声明在父类吧。何况还有dll版本依赖问题,同事推脱问题,巴拉巴拉。
二、如何做?
我们可以在一开始,就将Person类按如下声明。继承DependencyObject。这里需要你先安装TouchSocket的库。
public class Person : DependencyObject
{/// <summary>/// 年龄/// </summary>public int Age { get; set; }//常规属性
}
然后,就Ok了。当后续你需要什么属性的时候,自己声明扩展即可。
这样,你就可以随意的往Person类中添加属性了。
public static class DependencyExtensions
{/// <summary>/// 依赖项/// </summary>public static readonly DependencyProperty<int> MyPropertyProperty2 =DependencyProperty<int>.Register("MyProperty2", typeof(DependencyExtensions), 10);/// <summary>/// 设置MyProperty2/// </summary>/// <typeparam name="TClient"></typeparam>/// <param name="client"></param>/// <param name="value"></param>/// <returns></returns>public static TClient SetMyProperty2<TClient>(this TClient client, int value) where TClient : IDependencyObject{client.SetValue(MyPropertyProperty2, value);return client;}/// <summary>/// 获取MyProperty2/// </summary>/// <typeparam name="TClient"></typeparam>/// <param name="client"></param>/// <returns></returns>public static int GetMyProperty2<TClient>(this TClient client) where TClient : IDependencyObject{return client.GetValue(MyPropertyProperty2);}
}
使用
Person person =new Person();
person.SetMyProperty2(2);//扩展属性必须通过扩展方法
int value=person.GetMyProperty2();
完工。
具体的使用细节可看TouchSocket依赖属性
相关文章:
C# 如何实现对“属性”的扩展
目录一、为什么要扩展属性二、如何做?一、为什么要扩展属性 属性是一个类的特征,随着开发的不断升级,这种特征可能在一直变化,有时候为了向下兼容,一般属性的数量都是直接递增的。 例如:一个Person类&…...
EBS 物料属性 先后台对应关系 MTL_SYSTEM_ITEMS_B
Introductionweb The basic table mtl_system_items_b is the basic table of item in ERP system and there are a lot of columns,but I don’t know used of each column,particularly the column like %_flag. The reason of general exception may be because the ‘%_fl…...
MYSQL数据库-主从复制(原理及搭建)
文章目录1 概述2 原理3 搭建3.1 主库配置3.2 从库配置1 概述 主从复制是指将主数据库的DDL和 DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。 MySQL支持一台主库同时向多台从库进…...
3GPP-NR Band25标准定义频点和信道(3GPP V17.7.0 (2022-12))
Reference test frequencies for NR operating band n25 Table 4.3.1.1.1.25-1: Test frequencies for NRoperating band n25 and SCS 15 kHz CBW [MHz]carrierBandwidth...
微信小程序 之 原生开发
目录 一、前期预备 1. 预备知识 2. 注册账号 - 申请AppID 3. 下载小程序开发工具 4. 小程序项目结构 5. 小程序的MVVM架构 二、创建小程序项目 1. 查看注册的appId 2. 创建项目 3. 新建页面 01 - 创建text页面文件夹 02 - 新建text的page 03 - 在app.json中配置 …...
常用vim命令和vim基本使用及Linux用户的管理,用户和组相关文件
常用vim命令和vim基本使用及Linux用户的管理,用户和组相关文件1. vim 的基本介绍和使用1.1 vim的三种模式1.2 常用vim命令【小白】1.3 Vim键盘图:2. Linux用户管理2.1 添加用户2.2 删除用户2.3 修改账号3. Linux系统用户组的管理4. 用户和组相关文件4.1 …...
阿里云服务器部署前后端分离项目
阿里云服务器部署 【若依】 前后端分离项目 文章目录一、域名解析二、服务器操作系统置空三、部署方式四、需安装环境配置五、Linux服务器安装相应内容(具体安装步骤)(一)安装JDK(3种方式)使用Yum安装&…...
内核经典数据结构list 剖析
前言:linux内核中有很多经典的数据结构,list(也称list_head)为其中之一,这些数据结构都是使用C语言实,并且定义和实现都在单独的头文件list.h中。可以随时拿出来使用。list.h的定义不同linux发行版本路径不同,我们可以在/usr/incl…...
华为OD机试 - 考优选核酸检测点(Python)| 真题+思路+考点+代码+岗位
优选核酸检测点 题目 张三要去外地出差,需要做核酸,需要在指定时间点前做完核酸, 请帮他找到满足条件的核酸检测点。 给出一组核酸检测点的距离和每个核酸检测点当前的人数给出张三要去做核酸的出发时间 出发时间是 10 分钟的倍数 同时给出张三做核酸的最晚结束时间题目中…...
在魔改PLUS-F5280开发板上使用合封qsp iflash
文章目录引言硬件调整软件调整总结引言 由于目前灵动官网暂未发布正式版的PLUS-F5280开发板,可以使用现有的PLUS-F5270 v1.2开发板(下文简称PLUS-F5270开发版)替换为MM32F5280微控制器芯片,改装为PLUS-F5280开发板。本文记录了使…...
uni-app 瀑布流
效果图 一、组件 components/u-myWaterfall.vue <template><view class"u-waterfall"><view id"u-left-column" class"u-column"><slot name"left" :leftList"leftList"></slot></view&…...
华为OD机试 - 去除多余空格(Python)| 真题+思路+考点+代码+岗位
去除多余空格 题目 去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和结束下标。 条件约束: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oQABYuJD-1676475739950)(https://…...
MyBatis 二级缓存简单使用步骤
1、二级缓存使用 在 MyBatis 中默认二级缓存是不开启的,如果要使用需手动开启。在 mybatis-config.xml 配置文件中设置 cacheEnabled true ,配置如下: <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE c…...
kubeadmin kube-apiserver Exited 始终起不来查因记录
kubeadmin kube-apiserver Exited 始终起不来查因记录 [rootk8s-master01 log]# crictl ps -a CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD b7af23a98302e …...
论文投稿指南——中文核心期刊推荐(工程材料学)
【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…...
【动态规划】背包问题题型及方法归纳
背包问题的种类 背包问题是在规定背包容量为j的前提下,每个物品对应的体积为v[i],价值为w[i],从物品0到物品i中选择物品放入背包中,找出符合某种要求的价值。 (1)背包问题种类 01背包:每种物…...
全球十大资质正规外汇期货平台排行榜(最新版汇总)
外汇期货简称为FxFut,是“Forex Futures”的缩写,是在集中形式的期货交易所内,交易双方通过公开叫价,以某种非本国货币买进或卖出另一种非本国货币,并签订一个在未来的某一日期根据协议价格交割标准数量外汇的合约。 …...
使用Paramiko时遇到的一些问题
目录 1.背景 2.问题合集 1)“bash: command not found” 2)Paramiko中正常的输入,却到了stderr,而stdout是空 3)命令实际是alias 1.背景 在自动化脚本中,使用了库Paramiko,远程SSH到后台服…...
数据预处理(无量纲化、缺失值、分类特征、连续特征)
文章目录1. 无量纲化1.1 sklearn.preprocessing.MinMaxScaler1.2 sklearn.preprocessing.StandardScaler2. 缺失值3. 分类型特征4. 连续型特征数据挖掘的五大流程包括:获取数据数据预处理特征工程建模上线 其中,数据预处理中常用的方法包括数据标准化和归…...
【C#基础】C# 运算符总结
序号系列文章2【C#基础】C# 基础语法解析3【C#基础】C# 数据类型总结4【C#基础】C# 变量和常量的使用文章目录前言运算符1,算术运算符2,布尔逻辑运算符3,位运算符4,关系运算符5,赋值运算符6,其他运算符7&am…...
LinkSwift:彻底告别网盘下载限速的终极解决方案
LinkSwift:彻底告别网盘下载限速的终极解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…...
KMS_VL_ALL_AIO终极指南:一站式Windows与Office智能激活解决方案
KMS_VL_ALL_AIO终极指南:一站式Windows与Office智能激活解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO是一款功能强大的智能激活脚本工具,专为W…...
Windows Defender完全移除终极指南:3种模式深度解析与实战教程
Windows Defender完全移除终极指南:3种模式深度解析与实战教程 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mir…...
SafeClaw:构建安全合规的自动化数据抓取框架
1. 项目概述:当“安全”成为开源项目的核心基因在开源社区里,每天都有成千上万的新项目诞生,但真正能让人眼前一亮、愿意花时间去研究的,往往都带着一个鲜明的“标签”。最近,一个名为SafeClaw的项目引起了我的注意。它…...
企业内如何利用 Taotoken 构建统一的 AI 能力中台
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业内如何利用 Taotoken 构建统一的 AI 能力中台 在技术驱动的业务环境中,中型及大型企业内部的多个团队或产品线往往…...
揭秘大模型上线即崩真相:SITS 2026首席架构师亲授3类隐性推理延迟根因及实时熔断方案
更多请点击: https://intelliparadigm.com 第一章:AI原生LLMOps:SITS 2026大模型运维专项技术分享 AI原生LLMOps 正在重塑大模型交付生命周期——它不再将模型训练、评估、部署与监控视为线性阶段,而是以模型为一等公民ÿ…...
解锁网页资源新技能:猫抓浏览器插件让视频音频下载变得如此简单
解锁网页资源新技能:猫抓浏览器插件让视频音频下载变得如此简单 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经在观看精彩的…...
Python通达信数据接口终极指南:5分钟快速获取A股行情数据
Python通达信数据接口终极指南:5分钟快速获取A股行情数据 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在量化投资和金融数据分析领域,获取准确、及时的股票行情数据是每…...
ImageGlass:如何构建高效开源图像查看器,90+格式支持与模块化架构深度解析
ImageGlass:如何构建高效开源图像查看器,90格式支持与模块化架构深度解析 【免费下载链接】ImageGlass 🏞 A lightweight, versatile image viewer 项目地址: https://gitcode.com/gh_mirrors/im/ImageGlass 在数字图像处理日益复杂的…...
告别复杂配置!5分钟在Vue/React项目中集成讯飞语音听写WebSocket API
5分钟实现Vue/React与讯飞语音听写的优雅集成方案 在智能语音交互逐渐成为标配的今天,前端开发者经常面临将语音识别能力快速集成到现代Web应用中的需求。讯飞语音听写WebSocket API凭借其流式传输、低延迟的特性,成为众多项目的首选方案。但官方示例往往…...
