zoukankan      html  css  js  c++  java
  • 是Attribute,还是Property?

    --原文引自:http://www.pcjx.com/Dotnet/C/44010.html 

    是Attribute,还是Property?有时是个麻烦。

        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。

        当我们在学习新知识的时候,除了“知其然”,更要“知其所以然”,这样我们才能对概念有深层次的理解。同时,在我们平日里使用术语的时候,一定要准确,否则在交流时遇到不必要的障碍,白白增加交流成本。

  • 相关阅读:
    flock对文件锁定读写操作的问题 简单
    hdu 2899 Strange Fuction(二分)
    hdu 2199 Can you solve this equation? (二分)
    poj 3080 Blue Jeans (KMP)
    poj 2823 Sliding Window (单调队列)
    poj 2001 Shortest Prefixes (trie)
    poj 2503 Babelfish (trie)
    poj 1936 All in All
    hdu 3507 Print Article (DP, Monotone Queue)
    fzu 1894 志愿者选拔 (单调队列)
  • 原文地址:https://www.cnblogs.com/amadeuslee/p/3744506.html
Copyright © 2011-2022 走看看