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. LLVM 笔记(二)—— PHI node

    ilocker:关注 Android 安全(新手) QQ: 2597294287 什么是 PHI node? 所有 LLVM 指令都使用 SSA (Static Single Assignment,静 ...

  2. 《InsideUE4》-7-GamePlay架构(六)PlayerController和AIController

    PlayerController:你不懂,伴君如伴虎啊 AIController:上来,我自己动 引言 上文我们谈到了Component-Actor-Pawn-Controller的结构,追溯了ACo ...

  3. 用CSS开启硬件加速来提高网站性能

    国外一篇文章,有点意思,转载过来,准备尝试下~ 中文地址:http://www.cnblogs.com/rubylouvre/p/3471490.html 原文地址:http://blog.teamt ...

  4. 如何用python在Windows系统下,生成UNIX格式文件

    平时测试工作中,少不了制造测试数据.最近一个项目,我就需要制造一批可在UNIX下正确读取的文件.为确保这批文件能从FTP下载成功,开发叮嘱我:“文件中凡是遇到换行,换行符必须是UNIX下的LF,而不是 ...

  5. NYOJ-858下三角矩阵

    下三角矩阵 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 给定一个由0和1组成的矩阵.只允许交换相邻的两行,要把矩阵转化成下三角矩阵(主对角线上方的元素都是0),最少需 ...

  6. C++系统预定义4个用于标准数据流对象

    C++系统预定义4个用于标准数据流对象 cin   cout   cerr   clog C++里关于cerr,clog,cout三者的区别: cerr(无缓冲标准错误)-----没有缓冲,发送给它的 ...

  7. 使用Memberane Moniter监控HTTP & SOAP requests

    Memberane Moniter 使用方法见左侧Documentation 此工具可以监控到每一次发生在指定端口的http请求或者soap请求,如图所示. 但是个人认为仍然有几个问题: 1.不能真正 ...

  8. [CareerCup] 9.8 Represent N Cents 美分的组成

    9.8 Given an infinite number of quarters (25 cents), dimes (10 cents), nickels (5 cents) and pennies ...

  9. RSA加密算法的java实现

    package rsa; import java.security.*;import java.security.interfaces.*;import javax.crypto.*; public ...

  10. ASP.net MVC 学习笔记(一)-一些不同点

    1.在 MVC 中,请求到 Controller 中时,系统会判断是那个类的方法当执行完 return 时,系统会自动在 View 中寻找同名的 aspx 文件 来进行展示 实际上每一个 Contro ...