zoukankan      html  css  js  c++  java
  • Property和attribute的区别[转]

    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

  • 相关阅读:
    【Android Developers Training】 73. 布局变化的动画
    【Android Developers Training】 72. 缩放一个视图
    【Android Developers Training】 71. 显示翻牌动画
    svn更改地址怎么办
    python学习手册
    failed to bind pixmap to texture
    Ubuntu 12.04安装Google Chrome
    svn update 时总是提示 Password for '默认密钥' GNOME keyring: 输入密码
    重设SVN 的GNOME keyring [(null)] 的密码
    Nginx + uWSGI + web.py 搭建示例
  • 原文地址:https://www.cnblogs.com/iiwen/p/5504296.html
Copyright © 2011-2022 走看看