.NET中属性和特性
经常有人提出这样的问题:
一个表示业务规则的类,我想在这个类上加一些表示规则的元数据,可以让用户获取更友好的规则名,描述,和其他一些信息。我该采用特性还是属性呢?
我的建议是使用属性。有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中属性和特性相关推荐
- 深入理解JavaScript中的属性和特性
深入理解JavaScript中的属性和特性 JavaScript中属性和特性是完全不同的两个概念,这里我将根据自己所学,来深入理解JavaScript中的属性和特性. 主要内容如下: 理解JavaSc ...
- JS魔法堂:属性、特性,傻傻分不清楚
一.前言 或许你和我一样都曾经被下面的代码所困扰 var el = document.getElementById('dummy'); el.hello = "test"; con ...
- es了解集群中属性 4
2019独角兽企业重金招聘Python工程师标准>>> 了解集群中属性 GET /_cluster/health status 字段是我们最关心的. status 字段指示着当前集群 ...
- Entity Framework 4.3 中的新特性
原文地址:http://www.cnblogs.com/supercpp/archive/2012/02/20/2354751.html EF4.3于2月9号正式发布了,微软的EF小组最近一年开始发力 ...
- 第一次来,试发一帖!--ASP.NET 2.0 中的SqlCacheDependency特性
ASP.NET中的Page Cache是个很有用的东东,只要简单的在页面上方加上一个OutputCache标签,就可以让页面在制定的Duration内直接把自动保存在缓存中的页面内容输出,而不需要让A ...
- 【Android 属性动画】属性动画 Property Animation 简介 ( 属性动画简介 | 属性动画特性 )
文章目录 一.属性动画简介 二.属性动画特性 一.属性动画简介 属性动画简介 : 1.动画制作框架 : 属性动画系统 , 允许你 将任何可变的操作制作成动画 , 其功能很强大 ; 2.基本功能 : 使 ...
- Spring 2.5:Spring MVC中的新特性
转载说明:infoQ就是牛人多,看人家去年就把Spring2.5注视驱动的MVC写出来了,还是这么详细,我真是自叹不如,今天偶尔看到这篇文章非常认真的拜读了2遍,简直是茅厕顿开啊....\(^o^)/ ...
- MS CRM 2011中的新特性(1)——界面部分
MS crm2011中,在界面部分的调整包括有ribbon.入门窗格.最近访问列表.以及实例的表单方面的调整,下面一一介绍. Ribbon特性 MS CRM2011中,使用了Ribbon作为工作菜单的 ...
- WWDC2017 笔记 - Cocoa Touch 中的新特性
这篇文章是 What's New in Cocoa Touch / UIKit Session 201 的一些整理.[基于OC] 转自我的 Blog: Danny's Dream Drag Drop ...
最新文章
- SAP RETAIL MM42维护商品采购信息记录数据的缺陷
- Python面向对象中super用法与MRO机制
- C语言满分代码:L1-059 敲笨钟 (20分)
- mdAAPP:安装后会一直存在手机中,安装数据及缓存都会占用大量内存,而且各家全家桶APP之间都有一些藕断丝连的唤醒关系。 小程序:不需要安装在手机上,微信有严格的小程序内存管理机制,和微信共用内存使
- 前端学习(696):双重for循环
- 玩转python(2)多线程的历史2
- 【Python】安装IPython和IPthon Notebook
- 【Shell脚本学习指南笔记】重定向文件描述符 21
- 步骤五 · 4-9 解决getElementsByClassName()兼容性 未解决
- 页面中超长字段只显示部分
- Python中的条件判断和循环
- Linux内核抢占实现机制分析
- Jenkins通过FTP上传站点太多文件导致太慢且不稳定,切换为压包上传再解压的思路(asp.net)...
- 802.1x客户端 linux,Gentoo Linux--校园网(802.1x)拨号认证客户端解决方案
- 汽车工程大专业细分学科类别小探
- 利用Fiddler下载旧版本 iOS App
- android背光,Android背光亮度调节
- 在苹果MAC OS X Lion系统上使用Outlook for MAC 2011配置Exchange邮箱
- unity3d俯视角简易移动控制脚本及其易错点小分享
- 机械手基坐标系和工具坐标系的相互转换