首页 / 知识
关于c#:“代理属性”是好的样式吗?
2023-04-16 20:13:00

Are “proxy properties” good style?我有一个带有字符串属性的类,实际上是几个用分隔符连接的字符串。 我想知道具有这样的代理属性是否是一种好形式:
我有忽略任何风险吗? 似乎数组是真实的数据,单字符串的东西很方便。很好,但是我想说要注意诸如序列化和成员克隆之类的事情,它们将获取并设置两个可写属性。 我想我会的。
实际上,字符串中的分隔符实际上并不是类的一部分,而是短暂的细节。明确引用它,例如,CSV应用程序可以传递逗号,制表符分隔的应用程序可以传递标签。这将使您的应用程序易于维护。而且,它消除了为相同的实际数据使用两个getter和setter的麻烦问题。 在我看来,将两个可设置的属性链接在一起并不是一件好事。如果确实需要,请切换到使用显式的get / set方法而不是属性。具有明显作用的代码以后几乎总是会咬你。尽可能使事情简单明了。 另外,如果您有一个属性,该属性是包含子字符串的格式化字符串,那么您真正想要的是该属性的单独struct /类,而不是滥用原始类型。 属性旨在成为类的非常简单的成员。获取或设置属性的值应该被认为是微不足道的操作,没有明显的副作用。 如果设置属性导致除分配的属性以外的类的公共值发生更改,则这比基本分配更重要,并且可能不再适合该属性。 "复杂"属性很危险,因为它超出了呼叫者的期望。属性被解释为字段(具有副作用),但是您希望将其解释为可以分配值并随后检索该值的字段。这样,调用者应该期望能够分配给多个属性,并在以后再次检索它们的值。 在您的示例中,我无法为两个属性都赋值并检索它们;一个值会影响另一个。这打破了对该物业的基本期望。如果您创建了一种同时为这两个属性分配值并使两个属性都为只读的方法,则可以更轻松地了解在何处设置值。 另外,顺便说一句: 从属性返回临时数组通常被认为是不好的做法。数组可能是不可变的,但它们的内容不是不变的。这意味着您可以在数组中更改将与对象一起保留的值。 例如:
这段代码看起来像是在更改
定义"好"。它不会中断(除非您未能正确保证传递给 我不确定这种设计的好处是什么。我认为使用扩展方法可以更好地实现拆分。 至少,我将删除IndividualStrings属性上的设置器,或将其移入两个方法:string [] SplitActualProperty()和void MergeToActualProperty(string []部分)。 好吧,我想说您的"组合"是高风险的,如果有人不知道他们必须传递已经加入的值序列,或者上面的示例可能会遗漏该怎么办?如果字符串已经包含分隔符,该怎么办-您会中断。 我确信根据该属性的使用频率,性能不是很好。 |
最新内容
相关内容
linux命令连接数修改?
linux命令连接数修改?,服务,系统,网络,环境,密码,情况,地址,命令,服务器,表示,linux设置telnet服务最大连接数的方法1、在red hat Linux 9的安linux输出字符串命令?
linux输出字符串命令?,标准,基础,字符串,资料,简介,商业,数字,系统,命令,汉字,Linux中c语言中汉字字符串的输出引入标准输入输出库:sdtio.h。定linux网口连接命令?
linux网口连接命令?,网络,系统,地址,密码,检测,软件,情况,分析,电脑,状态,怎么用linux命令连接racle数据库(linux如何连接数据库)连接mysql(myslinux的网络连接命令?
linux的网络连接命令?,地址,系统,工作,网络,工具,信息,命令,基础,服务,目录,linux常用命令及用法1、linux系统常用操作命令如下:ls:全拼list,功能linux命令删除字符串?
linux命令删除字符串?,软件,系统,代码,名称,通用,连续,字符,字符串,命令,空格,类似trim命令,去除字符串中的冒号,有这个简单的命令吗?1、=trim关于linux命令连接符?
关于linux命令连接符?,位置,数据,链接,系统,概念,档案,文件,符号,节点,命令,linux中,什么是连结档,链接,链接目录1、Linux中包括两种链接:硬链linux命令连接端口?
linux命令连接端口?,地址,系统,服务,情况,环境,端口,灵活,软件,资料,检测,如何在Linux环境下测试端口的连通性?可以看到默认是使用TCP进行测试linux连接命令怎么用?
linux连接命令怎么用?,工作,地址,系统,网络,工具,信息,服务,命令,标准,名字,Linux的管道命令如何使用?1、管道命令只处理前一个命令正确输出,不linux加软连接命令?
linux加软连接命令?,位置,系统,设备,链接,文件,交通,信息,数据,对比,地方,在Linux下同时为多个文件创建软连接1、是。软链接类似于windows系统远程命令连接linux?
远程命令连接linux?,系统,密码,名称,图片,网络,软件,百度,地址,服务,电脑,Linux系统MySQL如何开启远程连接百度经验:jingyan.baidu.com工具/原连接linux桌面命令?
连接linux桌面命令?,系统,软件,工作,密码,电脑,信息,工具,网站,地址,名称,linux命令行怎么进入桌面返回到我的桌面界面:Ctrl+Alt+F7退出。Ctrl+linux访问连接命令?
linux访问连接命令?,系统,地址,网络,密码,服务,软件,位置,对外,处分,命令,怎么用Linux命令联网1、登陆Linux系统。先使用root账号及密码登陆li