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. Java中图片压缩处理

    原文http://cuisuqiang.iteye.com/blog/2045855 整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享. 首先,要压缩的图片格式不能说动态图片,你 ...

  2. ubuntu下新建用户

    ubuntu下新建用户和RedHat系列的linux有点不一样 新建用户的命令是useradd,修改密码是passwd,如下: sudo useradd zhuhui sudo passwd 1234 ...

  3. 配置TortoiseSVN客户端, 强制签入前加注释

    正如上篇提到, 总有一些人在签入代码到SVN前没有加注释, 然后, 像这样: 鬼才知道改了什么东西. ①有些人可能就是没有写注释的习惯, ②有些人可能是忘记写注释 && SVN服务端和 ...

  4. HashMap,Hashtable,TreeMapMap

    package com.wzy.list; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterato ...

  5. Django调用JS、CSS、图片等静态文件

    zz 在下面的例子中,我们将media作为静态(CSS\JS\图片文件)文件的目录 方法一. 1.首先在settings.py文件中自定义参数 STATIC_PATH=’./media’ .(意为当前 ...

  6. [转]Windows平台下Makefile学习笔记

    Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...

  7. [No000075]有没有安全的工作?

    如果你经常使用互联网,可能知道有一种东西叫做Flash. 它是一种软件,用来制作网页游戏.动画,以及视频播放器.只要观看网络视频,基本都会用到它. 七八年前,它是最热门的互联网技术之一.如果不安装Fl ...

  8. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 主管可以看下属的数据

    主管可以看下属的数据,这个是经常用到的一个权限,不管是大公司,还是小公司都需要的功能. 通过以下2个方法,可以任意达到想要的效果了,设置简单灵活,还能递归运算下属,有时候简单好用就是硬道理. #reg ...

  9. linux源代码安装程序

    下载源代码之后 tar zxvf file.tar.gz      解压源代码压缩包 ./configure --prefix=/opt/haha/  安装到这个路径 make  编译 sudo ma ...

  10. Android BLE 蓝牙编程(二)

    大家中秋快乐啊--哈哈,今天继续工程项目吧! 上篇我们已经实现了蓝牙设备的扫描,本篇我们来通过list展示扫描到的设备并 实现点击连接. 先贴出上篇的完整的MainActivity的方法: packa ...