经常有人提出这样的问题:

一个表示业务规则的类,我想在这个类上加一些表示规则的元数据,可以让用户获取更友好的规则名,描述,和其他一些信息。我该采用特性还是属性呢?

我的建议是使用属性。有4个原因:

首先,属性一眼就能看出。类的使用者可以使用智能感知来看到类的属性,比使用特性方便直观很多。

第二,属性使用比特性方便很多。你不希望搞一堆代码,从元数据特性中抽取string。除非你必须这样做。

第三,数据比如名称和描述是很有可能是要本地化的。设为属性意味着属性你可以从外部的源中获得属性值,比如你想本地化为日文版本。

最后。让我们看一下基本的面向对象设计原则,我们总是试图将事物模型化,着这个例子中,就是模型化一个“业务规则”

注意,一个业务规则不是一个类,规则也不是一个接口。一个规则既不是属性也不是方法,一个规则并不是任何程序语言结构,规则就是规则,类和结构,接口这些东西是我们用来实现模型的一种机制,这种模型使用了我们认为合适的语法。小心不要混淆了需要模型化的事物和如何模型化的机制。

属性和字段,接口和类等这些东西是模型的一部分,每一个都表示了模型世界中的某个事物。我们发明了属性,用来模型化事物X具有Y属性这种关系。

特性不是这样的。看下面的一个特性的典型用法:

[Obsolete]
[Serializable]
public class Giraffe : Animal
{ ...

特性对于模型化一个事物没有任何作用。特性是面向机制——类和字段,参数之类。很明显,上例中。并不是说长颈鹿有一个过时的和可序列化的。也不表示长颈鹿是过时的或者可序列化的。这只是说这个Giraffe这个类是过时的,Giraffe这个类是可以序列化的。

总之,使用特性描述你的机制,使用属性模型化你的事物。

http://blogs.msdn.com/b/ericlippert/archive/2009/02/02/properties-vs-attributes.aspx

转载于:https://blog.51cto.com/cnn237111/917669

.NET中属性和特性相关推荐

  1. 深入理解JavaScript中的属性和特性

    深入理解JavaScript中的属性和特性 JavaScript中属性和特性是完全不同的两个概念,这里我将根据自己所学,来深入理解JavaScript中的属性和特性. 主要内容如下: 理解JavaSc ...

  2. JS魔法堂:属性、特性,傻傻分不清楚

    一.前言 或许你和我一样都曾经被下面的代码所困扰 var el = document.getElementById('dummy'); el.hello = "test"; con ...

  3. es了解集群中属性 4

    2019独角兽企业重金招聘Python工程师标准>>> 了解集群中属性 GET /_cluster/health status 字段是我们最关心的. status 字段指示着当前集群 ...

  4. Entity Framework 4.3 中的新特性

    原文地址:http://www.cnblogs.com/supercpp/archive/2012/02/20/2354751.html EF4.3于2月9号正式发布了,微软的EF小组最近一年开始发力 ...

  5. 第一次来,试发一帖!--ASP.NET 2.0 中的SqlCacheDependency特性

    ASP.NET中的Page Cache是个很有用的东东,只要简单的在页面上方加上一个OutputCache标签,就可以让页面在制定的Duration内直接把自动保存在缓存中的页面内容输出,而不需要让A ...

  6. 【Android 属性动画】属性动画 Property Animation 简介 ( 属性动画简介 | 属性动画特性 )

    文章目录 一.属性动画简介 二.属性动画特性 一.属性动画简介 属性动画简介 : 1.动画制作框架 : 属性动画系统 , 允许你 将任何可变的操作制作成动画 , 其功能很强大 ; 2.基本功能 : 使 ...

  7. Spring 2.5:Spring MVC中的新特性

    转载说明:infoQ就是牛人多,看人家去年就把Spring2.5注视驱动的MVC写出来了,还是这么详细,我真是自叹不如,今天偶尔看到这篇文章非常认真的拜读了2遍,简直是茅厕顿开啊....\(^o^)/ ...

  8. MS CRM 2011中的新特性(1)——界面部分

    MS crm2011中,在界面部分的调整包括有ribbon.入门窗格.最近访问列表.以及实例的表单方面的调整,下面一一介绍. Ribbon特性 MS CRM2011中,使用了Ribbon作为工作菜单的 ...

  9. WWDC2017 笔记 - Cocoa Touch 中的新特性

    这篇文章是 What's New in Cocoa Touch / UIKit Session 201 的一些整理.[基于OC] 转自我的 Blog: Danny's Dream Drag Drop ...

最新文章

  1. SAP RETAIL MM42维护商品采购信息记录数据的缺陷
  2. Python面向对象中super用法与MRO机制
  3. C语言满分代码:L1-059 敲笨钟 (20分)
  4. mdAAPP:安装后会一直存在手机中,安装数据及缓存都会占用大量内存,而且各家全家桶APP之间都有一些藕断丝连的唤醒关系。 小程序:不需要安装在手机上,微信有严格的小程序内存管理机制,和微信共用内存使
  5. 前端学习(696):双重for循环
  6. 玩转python(2)多线程的历史2
  7. 【Python】安装IPython和IPthon Notebook
  8. 【Shell脚本学习指南笔记】重定向文件描述符 21
  9. 步骤五 · 4-9 解决getElementsByClassName()兼容性 未解决
  10. 页面中超长字段只显示部分
  11. Python中的条件判断和循环
  12. Linux内核抢占实现机制分析
  13. Jenkins通过FTP上传站点太多文件导致太慢且不稳定,切换为压包上传再解压的思路(asp.net)...
  14. 802.1x客户端 linux,Gentoo Linux--校园网(802.1x)拨号认证客户端解决方案
  15. 汽车工程大专业细分学科类别小探
  16. 利用Fiddler下载旧版本 iOS App
  17. android背光,Android背光亮度调节
  18. 在苹果MAC OS X Lion系统上使用Outlook for MAC 2011配置Exchange邮箱
  19. unity3d俯视角简易移动控制脚本及其易错点小分享
  20. 机械手基坐标系和工具坐标系的相互转换

热门文章

  1. 时序数据库(TSDB)-为万物互联插上一双翅膀
  2. shell脚本编写知识2
  3. vscode同步设置扩展插件
  4. Java遇见HTML——JSP篇之JSP指令与动作元素
  5. Netty笔记(一)第一个程序
  6. NFS的access denied
  7. 安装Grid Control
  8. 我专严新闻小偷之心得与大家交流
  9. Go语言学习笔记 - PART11 - 面向对象
  10. 7月个人:Windows和Linux绑定和解绑ARP 了解ARP命令的用途。 掌握ARP命令的使用。...