C# 如何实现对“属性”的扩展 您所在的位置:网站首页 潘多拉x可以扩展属性吗 C# 如何实现对“属性”的扩展

C# 如何实现对“属性”的扩展

2024-06-29 14:09| 来源: 网络整理| 查看: 265

目录 一、为什么要扩展属性二、如何做?

一、为什么要扩展属性

属性是一个类的特征,随着开发的不断升级,这种特征可能在一直变化,有时候为了向下兼容,一般属性的数量都是直接递增的。

例如:一个Person类,他在项目初期,只有一个属性Age,可随着项目升级,可能需要Name,Address,甚至Price。

public class Person { /// /// 年龄 /// public int Age { get; set; }//常规属性 }

那么常规做法就是继承,然后在子类添加属性。亦或者修改源码,重新编译。

无论哪一种都有很大的麻烦事。

继承,会让显式的Person类无法使用声明到子类的属性,到时候必须进行强制转换,而一旦继承分支多起来的话,将非常糟糕。

而重新编译,带来的问题就更大了,总不能把属性都声明在父类吧。何况还有dll版本依赖问题,同事推脱问题,巴拉巴拉。

二、如何做?

我们可以在一开始,就将Person类按如下声明。继承DependencyObject。这里需要你先安装TouchSocket的库。

public class Person : DependencyObject { /// /// 年龄 /// public int Age { get; set; }//常规属性 }

然后,就Ok了。当后续你需要什么属性的时候,自己声明扩展即可。

这样,你就可以随意的往Person类中添加属性了。

public static class DependencyExtensions { /// /// 依赖项 /// public static readonly DependencyProperty MyPropertyProperty2 = DependencyProperty.Register("MyProperty2", typeof(DependencyExtensions), 10); /// /// 设置MyProperty2 /// /// /// /// /// public static TClient SetMyProperty2(this TClient client, int value) where TClient : IDependencyObject { client.SetValue(MyPropertyProperty2, value); return client; } /// /// 获取MyProperty2 /// /// /// /// public static int GetMyProperty2(this TClient client) where TClient : IDependencyObject { return client.GetValue(MyPropertyProperty2); } }

使用

Person person =new Person(); person.SetMyProperty2(2);//扩展属性必须通过扩展方法 int value=person.GetMyProperty2();

完工。

具体的使用细节可看TouchSocket依赖属性



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有