什么是特性(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 ...
随机推荐
- 实践分享:开始用Cordova+Ionic+AngularJS开发App
http://www.cocoachina.com/webapp/20150707/12395.html 本文是一篇关于我本人在使用Cordova+Ionic以及AngularJS开发移动App的过程 ...
- SDUT-2772_数据结构实验之串一:KMP简单应用
数据结构实验之串一:KMP简单应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定两个字符串string1和str ...
- ROS报错:IOError:[Errno 13]permission denied: /home/neousys/.ros/roscore-11311.pid"
在安装ROS后启动ROS,输入:roscore 时报错: 这个问题是由于该路径下ros文件权限造成的. 输入以下命令修改权限: sudo chmod -R ~/.ros/ 修改完成后再次输入rosco ...
- 杭电多校第二场1012 L - Longest Subarray ce 线段树
这题是真的秀...我服了...线段树用好了,感觉什么都可以写... 题目大意:给你一个串,问满足以下条件的子串中最长的是多长:对于每个数字,要么在这个子串没出现过,要么出现次数超过k次. 我们对于每一 ...
- nginx简单使用(windows)
本篇文章对术语不作讲解 下载nginx 首先,进入nginx官网http://nginx.org/en/download.html. 找到Stable version,此处的版本是稳定版本: 下载完成 ...
- Bert系列(三)——源码解读之Pre-train
https://www.jianshu.com/p/22e462f01d8c pre-train是迁移学习的基础,虽然Google已经发布了各种预训练好的模型,而且因为资源消耗巨大,自己再预训练也不现 ...
- activiti工作流引擎之uel表达式
qq讨论群:313032825本人做了一个微信公众号,用于分享各类视频学习资源和我多年学习经验,喜欢的可以关注哦! 有了前面几章,我们肯定有一定的困惑,activiti如何与实际业务整合,比如一条采购 ...
- colab找不到模块 no name
https://www.jianshu.com/p/2cf00bb9db34?utm_source=oschina-app 穷学生学习神经网络一定体会过“等待”的痛苦... 循环一次epoch急死人, ...
- spring boot activiti 整合
1.pom.xml <dependency> <groupId>org.activiti</groupId> <artifactId>activiti- ...
- H3C ISDN DCC基本配置示例