Attribute和Property都可以翻译成“属性”,有的地方用Attribute表示“属性”,有的地方又在用Property,初 学者常常在这两个单词间“迷失”,甚至认为二者没有区别,是一样的。
 
可是Attribute不等于Property。二者之间到底有何区别?
 
我们从OOA/OOD(Object Oriented Analysis / Object Oriented Design,面向对象分析与设计)说起。在OOA/OOD中的使用Attribute表示属性,指对象(Object)的特征(Feature)。
 
我们 在一些编程语言(如C#、Delhpi等)中遇到的“属性”一词,为何是Property,而不是Attribute呢?
 
为了理解这一点,我们把C++拽进来看看。OOA/OOD中的Attribute在C++中称为Member Variable(成员变量),慢慢开始明白了吧。
 
C++中的Member Variable在C#中可以继续延用,但有了一个新的称呼:Field(字段)。
 
看一个简单的C#示例:
 
public class Student {              // Student类
private string name; // C#中称为Field(字段),C++中称为Member Variable(成员变量),OOA/OOD中称为Attribute(属性)
}

我们整理出下表,可以看到同样的概念在OOA/OOD、C++和C#中的不同称呼:

Description
OOA/OOD
C++
.NET(C#) /Delphi
Feature
Attribute
Member Variable
Field

OOA/OOD中的方法(Method)是指对象的操作(Operation)。

在C++中称为Member Function(成员函数),而在C#中还是叫做Method。在表中加入对方法(Method)的称呼:

Description
OOA/OOD
C++
.NET(C#) /Delphi
Feature
Attribute
Member Variable
Field
Operation
Method
Member Function
Method

也可以看出,C++中将Attribute称为Member Variable,将Method称为Member Function,其实还是很贴切的。

从本质上说,确实是在声明变量、定义函数。后来者(C#等)可能觉得这样的称呼不够OO(Object Oriented,面向对象),于是做了些改变。

Method延用OOA/OOD的称呼不用说,但将Attribute称作Field,总觉得欠妥。因为 DB(Database,数据库)中有Field的概念,也译作“字段”,实在是容易混淆。

现在我们可以把OOA/OOD中提到的属性(Attribute)同C#中提到的属性(Property)区分开来。

继续上面的示例:

public class Student {              // Student类
    private string name;         // C#中称为Field(字段),C++中称为Member Variable(成员变量),OOA/OOD中称为Attribute(属性)
public string Name { // C#中称为Property(属性)
get { return name; }
set { name = value;}
}
}

我们顺便看看private和public:

Property本质上是一对get/set方法,可以进行访问控制,因而可以设置为public;

而按照OOA/OOD原则,Attribute不能设为public,而要设为private。

C#中确实也有Attribute,把它译作“特性”似乎更好些。如:
 
[WebMethod]
在不少的.NET/C#书籍中看到有把Attribute译成“属性”的,这样一来,老鸟倒是可以通过语境判断出来不是在说Property,初学者恐怕一下子就跌进云里雾里了。
 
虽然不至于“一个馒头引发的血案”,但“两个属性引发的歧异”,终究不是什么好事情。
 
另外,在Web编程中也常见到Attribute和Property混用的情况。
 
比如用VS 2003或2005创建一个ASP.NET应用程序,如果在代码视图添加控件:
<asp:TextBox id=”txtName” text=”Hello” runat=”server” />
此时TextBox控件中的id、text和runat都称为Attribute,这是延用了HTML中对属性(Attribute)的称呼。
 
如果是在设计视图中拖放控件,然后在属性(Properties)窗口中设置ID或Text,此时又会将ID或Text称为Property。 因为控件在服务器上是作为控件类(Control Class)实现,使得可以用编程的方式来访问控件。那么属性必然是Class中的Property。
 
在我们平日里使用术语的时候,一定要准确,否则在交流时遇到不必要的障碍

From: http://www.cnblogs.com/mfryf/archive/2012/02/14/2350988.html

Property和attribute的区别[转]的更多相关文章

  1. DOM 中 Property 和 Attribute 的区别

    原文地址:http://web.jobbole.com/83129/ property 和 attribute非常容易混淆,两个单词的中文翻译也都非常相近(property:属性,attribute: ...

  2. C#中Property和Attribute的区别

    C#中Property和Attribute的区别 Attribute 字段Property 属性(get;set;) 属性的正常写: private string name; public strin ...

  3. Property 和 Attribute 的区别(转)

    property 和 attribute非常容易混淆,两个单词的中文翻译也都非常相近(property:属性,attribute:特性),但实际上,二者是不同的东西,属于不同的范畴. property ...

  4. [转]DOM 中 Property 和 Attribute 的区别

    angular的文档: https://angular.io/guide/template-syntax#property-binding https://blog.csdn.net/sunq1982 ...

  5. JavaScript 中 Property 和 Attribute 的区别详解

    property 和 attribute非常容易混淆,两个单词的中文翻译也都非常相近(property:属性,attribute:特性),但实际上,二者是不同的东西,属于不同的范畴. property ...

  6. C#中 property 与 attribute的区别?

    C#中 property 与 attribute的区别?答:attribute:自定义属性的基类;property :类中的属性

  7. DOM 中 Property 和 Attribute 的区别(转)

    property 和 attribute非常容易混淆,两个单词的中文翻译也都非常相近(property:属性,attribute:特性),但实际上,二者是不同的东西,属于不同的范畴. property ...

  8. property和attribute的区别

    property是指类向外提供的数据区域.而attribute则是描述对象在编译时或运行时属性的,分为固有型和用户自定义型,其中用户自定义型可以利用Reflection在运行期获取.这两者是有本质区别 ...

  9. Property与Attribute的区别

    Property属于面向对象的范畴----属性 Attribute则是编程语言文法层面的东西----特征          Property属于面向对象的范畴.在使用面向对象编程的时候,常常需要对客观 ...

随机推荐

  1. Python列表list的用法

    #!usr/bin/env python# -*-coding:utf-8-*-#以下方法全在python2.7.x版本运行,请3.x以上的小伙伴们在print(放入括号内执行)#list列表的常用方 ...

  2. 关于 Java 中 finally 语句块的深度辨析

    应该有很多人对java的finally 理解的不是很透彻吧,这里有篇文章讲的非常深入.猛击下面链接.面试时经常问到这问题 http://www.ibm.com/developerworks/cn/ja ...

  3. [很郁闷]python2.7连接mysql5.5配置

    前言:今天在公司电脑上python版本跟自己家里电脑上的一样,不一样的是mysql公司版本5.6,结果花了两天的时间都没配置好python和mysql 简单说就是python连接mysql一直报200 ...

  4. 数据处理之PostgreSQL过程语言学习

    前段时间,公司更换新的PostgreSQL数据集市的系统过程中,自己下载了postgresqlAPI的pdf文件研究了一下PostgreSQL数据集市.发现使用PostgreSQL过程语言可以大大加快 ...

  5. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  6. JS -- 异步加载进度条

    今天在博客园问答里面看到博友问道怎么实现Ajax异步加载产生进度条. 很好奇就自己写了一个. 展现效果: 1) 当点击Load的时候,模拟执行异步加载. 浏览器被遮挡. 进度条出现. 实现思路: 1. ...

  7. 俄罗斯方块(Java实现)

    程序效果: 代码: //Box.java 1 package tetris; public class Box { private final int M = 30, N = 12; private ...

  8. 关于ES6新增的东西

    查询浏览器对ES6的支持情况https://kangax.github.io/compat-table/es6/ Chrome.MS Edge.Firefox.Safari.Node和其它很多环境都已 ...

  9. sql 首写字母查询姓名(字段)

    来自网上大神,不知道是谁,挂不上链接 /////////////////////// 1.生成方法函数 create function f_GetPy(@str nvarchar(4000)) ret ...

  10. Python-13-堡垒机开发

    今天主要是熟悉堡垒机开发流程.