什么是特性(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 ...
随机推荐
- jQuery 无刷新评论
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- tinyhttpd简介
一:简介: tinyhttpd是由J. DavidBlackstone在1999年编写的,实现了一个很简单的web服务器.支持GET和POST方法,总代码量也就在500行左右,可以用来学习HTTP协议 ...
- C# Brush Color String 互相转换
using System.Windows.Media; //String转换成Color Color color = (Color)ColorConverter.ConvertFromString(s ...
- iptables禁止QQ端口
#iptables -D FORWARD -p udp --dport 8000 -j REJECT
- ccf-201703-4-地铁修建
二分+并查集 发现了一个很奇怪的问题,二分的上界设置错了,结果是运行错误...只有95分.后来改了上界就100了,百思不得其解 #include<cstdio> #include<c ...
- WebService 基础知识点和用Postman调试
阅读连接:Retrofit 用Soap协议访问WebService 详解 参考 1.java发HTTP POST请求(内容为xml格式) 2. android解析XML总结(SAX.Pull.Dom三 ...
- webpack学习(三)配置loader
首先搞清楚两个问题: 1 什么是loader? 2 为啥要用各种loader 答: loader 就是各种打包规则,为什么要用是显而易见的,因为webpack还没智能到给它什么文件都能打包,对于js文 ...
- 【t002】jam的计数法
Time Limit: 1 second Memory Limit: 50 MB [问题描述] Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世 ...
- Python--day37--守护进程和几个常用的方法
1,p.daemon = True #设置子进程为守护进程 #守护进程会随着主进程的代码执行完毕 而结束 #子进程 --> 守护进程 import time from multiprocessi ...
- 【mac】关于mac的一些命令
一. 如何查看自己的文件大小,所有文件占了多少? du -h -d 1 . 当前目录文件以及大小 sudo du -h -d 1 / 所目录下的文件以及大小