什么是特性(Attribute)?
由面向对象思想,我们诞生了很多种面向对象编程语言,比如常用的Java,C#,这些语言中都共有类(Class)的概念,并用各自的方式去阐述、编写Class,或许方式不同,但它们都有一个共同点,即“类是对现实的映射与描述”。
比如“人”类,若我们要在C#中定义一个“人”类,你首先会想到给这个类中定义哪些类成员?姓名?年龄?性别?,这些都可以,凡是能描绘出一个人的特征的项,我们都能放进去,C#通过自己的一步步发展,将这些可以描绘类特征的项称作类成员,其中属性为外貌(表面)特征,方法为行为特征,我们可以通过这些特征来聚合出一个具体的人来。
说到这里再回顾标题,什么是特性?一个类的类成员既然已经能够描述一个该类型对象的信息,为什么还需要加入特性这个概念呢?
特性其实是一种信息载体,它的作用是补充或者描述属性的信息。比如一个人叫张三,于是我们都知道,有一个“人”类的对象,这个对象的属性“姓名”的值为“张三",然后现在有一个需求,我需要知道这个对象的姓名的书写步骤是怎样的。若不考虑特性,我完全可以在“人”这个Class中定义一个名为“笔画步骤”的属性,然后把“横、竖、横、竖、横弯钩......”的这些笔画以字符串集合的形式存放在这个属性里。这样子看似任务就完成了,但请回过头来想想,我们这个属性放在这里,他于情理是否合适?既然是定义在“人”类中的属性,“笔画步骤”是否可以用来描述人的特征?很显然,“人”这个类是没有一项特征为“笔画步骤”的,用来描述“人”类特征的属性,不建议、甚至是不应该用来描述另一个同样用来描述“人”类特征的属性。再者,特性本身其实也是一个类,我们都知道描述类的属性应该放在相应的类体里,那么“笔画步骤”这个属性,难道不应该放在特性自身的类体中么?这里可能有点绕,但是,品,你细品。
属性(Property)是用来描述类(Class)的信息载体,而特性(Attribute)是用来描述属性的信息载体,二者都是载体,只是描述对象发生了改变。
于是上面的需求就有了一个比较正确的解题方案,我们不通过在人类中定义属性存放笔画,而是另外定义一个类,将它设定为特性(特性本身也是一个类),然后在特性中定义一个集合,用于存放笔画,最后将这个特性引入人类,并标注在人类的“姓名”这个属性上。(这里我没有写代码,以后随缘补充。有关特性的代码以后会在另一篇特性的随笔中给出。)
至此,以上均为个人的学习体会,欢迎补充。
什么是特性(Attribute)?的更多相关文章
- [C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute
剖析 AssemblyInfo.cs - 了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 ...
- [C#] C# 知识回顾 - 特性 Attribute
C# 知识回顾 - 特性 Attribute [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5911289.html 目录 特性简介 使用特性 特性 ...
- C# 知识特性 Attribute
C#知识--获取特性 Attribute 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体关联后,可在运行时使用"反射"查询 ...
- 区分元素特性attribute和对象属性property
× 目录 [1]定义 [2]共有 [3]例外[4]特殊[5]自定义[6]混淆[7]总结 前面的话 其实attribute和property两个单词,翻译出来都是属性,但是<javascript高 ...
- .Net内置特性Attribute介绍
特性Attribute概述 特性(Attribute)是一种特殊的类型,可以加载到程序集或者程序集的类型上,这些类型包括模块.类.接口.结构.构造函数.方法.字段等,加载了特性的类型称之为特性的目标. ...
- 【点滴积累】通过特性(Attribute)为枚举添加更多的信息
转:http://www.cnblogs.com/IPrograming/archive/2013/05/26/Enum_DescriptionAttribute.html [点滴积累]通过特性(At ...
- 理解特性attribute 和 属性property的区别 及相关DOM操作总结
查一下英语单词解释,两个都可以表示属性.但attribute倾向于解释为特质,而property倾向于解释私有的.这个property的私有解释可以更方便我们下面的理解. 第一部分:区别点 第一点: ...
- 如何获取类或属性的自定义特性(Attribute)
如何获取类或属性的自定义特性(Attribute) 问题说明: 在ActiveRecord或者其他的ORM等代码中, 我们经常可以看到自定义特性(Attribute)的存在(如下面的代码所示) [Pr ...
- C# 知识特性 Attribute,XMLSerialize,
C#知识--获取特性 Attribute 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体关联后,可在运行时使用“反射”查询特性,获取特性集合方 ...
- c#特性attribute:
特性是被编译到metadata中, 是提供给反射用的. 特性attribute:1 什么是attribute,和注释有什么区别 2 声明和使用attribute3 使用attribute完成扩展4 ...
随机推荐
- oracle函数 lag()和lead()
[语法] lag(EXPR,<OFFSET>,<DEFAULT>) LEAD(EXPR,<OFFSET>,<DEFAULT>) [功能]表示根据COL1 ...
- QT 建立信号和槽的联系(事件处理)
Qt中事件处理机制叫做“信号”和“槽”signal &slot. 其模型为: 对象a中有一个信号signal:XXX(代表一个事件) 对象b中有一个槽slot:YYY(事件处理函数) 用con ...
- 阿里云POLARDB 2.0重磅来袭!为何用户如此的期待?
点击报名:POLARDB 2.0 升级发布会 回顾POLARDB 1.0升级之路 POLARDB 1.0主要的改进包括采用了计算存储分离的架构,完全兼容MYSQL,性能是原生MySQL的6倍.一个用户 ...
- jquery attr()和prop()方法的区别
$('').attr()返回的是html对象 $('').prop()返回的是DOM对象 attr(): attr() 方法设置或返回被选元素的属性和值. 当该方法用于返回属性值,则返回第一个匹配元素 ...
- OpenStack☞网关协议
一 动态页面与静态页面区别 静态页面:每一个网页都有一个固定的URL,且网页的URL以.html..htm..shtml等常见的形式为后缀. 网页内容已经发布到网站服务器上,无论是否有用户访问,每个静 ...
- day6_python之pickle、shelve序列化和反序列化
pickle.shelve,python私有,支持所有python数据类型 一.pickle dic={'name':'egon','age':18} print(pickle.dumps(dic)) ...
- iptables 连线追踪(Connection tracking)
「连線追蹤」:提供可用於判断包相关性的额外资讯.举例来說,一次FTP session同时需要两条分离的连線,控制与资料传输各一:用於追蹤FTP连線的扩充模组,运用对於FTP恊定的认知,从控制连線上流动 ...
- 关于心跳ajax请求pending状态(被挂起),stalled时间过长的问题。涉及tcp连接异常。
环境:景安快云服务器(听说很垃圾,但是公司买的,我也刚来),CentOS-6.8-x86_64,Apache,MySQL5.1,PHP5.3. 问题:现公司有一个php系统,需要重复向后台发送ajax ...
- angularJS $q
1.$q $q是Angular的一种内置服务,它可以使你异步地执行函数,并且当函数执行完成时它允许你使用函数的返回值(或异常). 2.defer defer的字面意思是延迟, $q.defer() ...
- 使用国内阿里maven私服方法
方法1,在maven的config下setings.xml文件中加入以下代码 <mirrors> <mirror> <id>mirrorId</id> ...