由面向对象思想,我们诞生了很多种面向对象编程语言,比如常用的Java,C#,这些语言中都共有类(Class)的概念,并用各自的方式去阐述、编写Class,或许方式不同,但它们都有一个共同点,即“类是对现实的映射与描述”。

  比如“人”类,若我们要在C#中定义一个“人”类,你首先会想到给这个类中定义哪些类成员?姓名?年龄?性别?,这些都可以,凡是能描绘出一个人的特征的项,我们都能放进去,C#通过自己的一步步发展,将这些可以描绘类特征的项称作类成员,其中属性为外貌(表面)特征,方法为行为特征,我们可以通过这些特征来聚合出一个具体的人来。

    说到这里再回顾标题,什么是特性?一个类的类成员既然已经能够描述一个该类型对象的信息,为什么还需要加入特性这个概念呢?

  特性其实是一种信息载体,它的作用是补充或者描述属性的信息。比如一个人叫张三,于是我们都知道,有一个“人”类的对象,这个对象的属性“姓名”的值为“张三",然后现在有一个需求,我需要知道这个对象的姓名的书写步骤是怎样的。若不考虑特性,我完全可以在“人”这个Class中定义一个名为“笔画步骤”的属性,然后把“横、竖、横、竖、横弯钩......”的这些笔画以字符串集合的形式存放在这个属性里。这样子看似任务就完成了,但请回过头来想想,我们这个属性放在这里,他于情理是否合适?既然是定义在“人”类中的属性,“笔画步骤”是否可以用来描述人的特征?很显然,“人”这个类是没有一项特征为“笔画步骤”的,用来描述“人”类特征的属性,不建议、甚至是不应该用来描述另一个同样用来描述“人”类特征的属性。再者,特性本身其实也是一个类,我们都知道描述类的属性应该放在相应的类体里,那么“笔画步骤”这个属性,难道不应该放在特性自身的类体中么?这里可能有点绕,但是,品,你细品。

  属性(Property)是用来描述类(Class)的信息载体,而特性(Attribute)是用来描述属性的信息载体,二者都是载体,只是描述对象发生了改变。

  于是上面的需求就有了一个比较正确的解题方案,我们不通过在人类中定义属性存放笔画,而是另外定义一个类,将它设定为特性(特性本身也是一个类),然后在特性中定义一个集合,用于存放笔画,最后将这个特性引入人类,并标注在人类的“姓名”这个属性上。(这里我没有写代码,以后随缘补充。有关特性的代码以后会在另一篇特性的随笔中给出。)  

    至此,以上均为个人的学习体会,欢迎补充。

什么是特性(Attribute)?的更多相关文章

  1. [C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute

    剖析 AssemblyInfo.cs - 了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 ...

  2. [C#] C# 知识回顾 - 特性 Attribute

    C# 知识回顾 - 特性 Attribute [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5911289.html 目录 特性简介 使用特性 特性 ...

  3. C# 知识特性 Attribute

    C#知识--获取特性 Attribute 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体关联后,可在运行时使用"反射"查询 ...

  4. 区分元素特性attribute和对象属性property

    × 目录 [1]定义 [2]共有 [3]例外[4]特殊[5]自定义[6]混淆[7]总结 前面的话 其实attribute和property两个单词,翻译出来都是属性,但是<javascript高 ...

  5. .Net内置特性Attribute介绍

    特性Attribute概述 特性(Attribute)是一种特殊的类型,可以加载到程序集或者程序集的类型上,这些类型包括模块.类.接口.结构.构造函数.方法.字段等,加载了特性的类型称之为特性的目标. ...

  6. 【点滴积累】通过特性(Attribute)为枚举添加更多的信息

    转:http://www.cnblogs.com/IPrograming/archive/2013/05/26/Enum_DescriptionAttribute.html [点滴积累]通过特性(At ...

  7. 理解特性attribute 和 属性property的区别 及相关DOM操作总结

    查一下英语单词解释,两个都可以表示属性.但attribute倾向于解释为特质,而property倾向于解释私有的.这个property的私有解释可以更方便我们下面的理解. 第一部分:区别点 第一点:  ...

  8. 如何获取类或属性的自定义特性(Attribute)

    如何获取类或属性的自定义特性(Attribute) 问题说明: 在ActiveRecord或者其他的ORM等代码中, 我们经常可以看到自定义特性(Attribute)的存在(如下面的代码所示) [Pr ...

  9. C# 知识特性 Attribute,XMLSerialize,

    C#知识--获取特性 Attribute 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体关联后,可在运行时使用“反射”查询特性,获取特性集合方 ...

  10. c#特性attribute:

    特性是被编译到metadata中,  是提供给反射用的. 特性attribute:1 什么是attribute,和注释有什么区别 2 声明和使用attribute3 使用attribute完成扩展4 ...

随机推荐

  1. 【错误收集】JDK的安装 2016-02-03 14:35 725人阅读 评论(23) 收藏

    自己的jdk是根据视频的指示来安装的,首先打开网址www.java.sun.com,然后找到java se的下载,根据自己的机器系统来下载安装包,如下图: 将安装包下载好之后,双击进行安装,根据提示进 ...

  2. Gym-101623H_High Score

    题意:t组数据,每组数据有abcd四个数,其中d可以加到abc任意一个数上(d可以拆分),求公式a^2 + b^2 + c^2 + 7 * min(a,b,c)的最大值. 题解:首先明确一点,平方的增 ...

  3. PHP5.2 汉字json_encode

    //对汉字编码 private function url_encode($str) { if(is_array($str)) { foreach($str as $key=>$value) { ...

  4. oracle函数 NEW_TIME(dt1,c1,c2)

    [功能]:给出时间dt1在c1时区对应c2时区的日期和时间 [参数]:dt1,d2 日期型 [返回]:日期时间 [参数]:c1,c2对应的 时区及其简写 大西洋标准时间:AST或ADT 阿拉斯加_夏威 ...

  5. java文件操作 之 创建文件夹路径和新文件

    一:问题 (1)java 的如果文件夹路径不存在,先创建: (2)如果文件名 的文件不存在,先创建再读写;存在的话直接追加写,关键字true表示追加 (3)File myPath = new File ...

  6. 一、JVM内存区域组成

    一.JVM内存区域组成  java把内存分四种:  1.栈区(stack segment)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放内存资源  2. ...

  7. 命名分组(?<name>....)

    捕获组分为: 普通捕获组(Expression) 命名捕获组(?Expression) 普通捕获组 从正则表达式左侧开始,每出现一个左括号"("记做一个分组,分组编号从 1 开始. ...

  8. 首次揭秘:阿里巴巴中间件在 Serverless 技术领域的探索

    Serverless 话题涉及范围极广,几乎包含了代码管理.测试.发布.运维和扩容等与应用生命周期关联的所有环节.AWS Lambda 是 Serverless 领域的标志性产品,但如果将其应用于核心 ...

  9. Windows系统下三十款优秀开源软件

    Windows系统下三十款优秀开源软件 1.Firefox 官方网站:http://www.getfirefox.com/ 可替换Internet Explorer 功能特点:如果你还没有使用Fire ...

  10. LRJ-Example-06-12-Uva572

    #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstring> #include <string ...