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

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

        AttributeProperty都可以翻译成属性,有的地方用Attribute表示属性,有的地方又在用Property,初学者常常在这两个单词间迷失,甚至认为二者没有区别,是一样的。可是Attribute不等于Property。二者之间到底有何区别?

        我们从OOA/OODObject Oriented Analysis / Object Oriented Design,面向对象分析与设计)说起。在OOA/OOD中的使用Attribute表示属性,指对象(Object)的特征(Feature)。我们在一些编程语言(如C#Delhpi等)中遇到的属性一词,为何是Property,而不是Attribute呢?

        为了理解这一点,我们把C++拽进来看看。OOA/OOD中的AttributeC++中称为Member Variable(成员变量),慢慢开始明白了吧。C++中的Member VariableC#中可以继续延用,但有了一个新的称呼:Field(字段)。看一个简单的C#示例:

    public class Student {              // Student

        private string name;         // C#中称为Field(字段),C++中称为Member Variable(成员变量),OOA/OOD中称为Attribute(属性)

    }

    我们整理出下表,可以看到同样的概念在OOA/OODC++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#等)可能觉得这样的称呼不够OOObject Oriented,面向对象),于是做了些改变。Method延用OOA/OOD的称呼不用说,但将Attribute称作Field,总觉得欠妥。因为DBDatabase,数据库)中有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;

            }

        }

    }

        我们顺便看看privatepublicProperty本质上是一对get/set方法,可以进行访问控制,因而可以设置为public;而按照OOA/OOD原则,Attribute不能设为public,而要设为private

    C#中确实也有Attribute,把它译作特性似乎更好些。如:

    [WebMethod]

        在不少的.NET/C#书籍中看到有把Attribute译成属性的,这样一来,老鸟倒是可以通过语境判断出来不是在说Property,初学者恐怕一下子就跌进云里雾里了。虽然不至于一个馒头引发的血案,但两个属性引发的歧异,终究不是什么好事情。

        另外,在Web编程中也常见到AttributeProperty混用的情况。比如用VS 20032005创建一个ASP.NET应用程序,如果在代码视图添加控件:

    <asp:TextBox id=”txtName” text=”Hello” runat=”server” />

    此时TextBox控件中的idtextrunat都称为Attribute,这是延用了HTML中对属性(Attribute)的称呼。

        如果是在设计视图中拖放控件,然后在属性(Properties)窗口中设置IDText,此时又会将IDText称为Property。因为控件在服务器上是作为控件类(Control Class)实现,使得可以用编程的方式来访问控件。那么属性必然是Class中的Property

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



    关于attribute和property的区别真把我搞晕了,google了一下别人的看法,也还是晕头转向;
    从attribute和property的字义上理解,attribute应该是"特性",汉语上理解"特性"就是与生具来的属性,所以有人把它理解成"元属性","标签"的意思(以和property区别)也是合适的,property就可以理解为是"属性"--附加的性质;
    不知我这种理解对不对?
    attribute:修饰属性(定语)
    property:是不同的属性(性质),一提倒property,就应该联想到,这是程序中可动态指定的.

    有啥可晕的,你管他翻译过来啥意思老外又不懂中文,知道他们都是啥东西就行了。
    property是c#中引入的一种语言特性,把c++中的一些编程技巧上升到语法的地位。
    这种特性就是把类数据成员声明为私有的,而提供公有的方法实现对他们的访问。
    例如
    public class A
    {
          private int data1;
          public  int Data1
         {
             get{return data1;}
             set{data1 = value;}
         }
    }
    Data1就是一个property

    ////////////////////////////////////////////////////////////////
    Attribute是一种更新的语言特性在c++中是没有类似的东西出现的
    他可以用来说明类、字段、方法的某些方面的特征比如是否可以某个类是否序列化、某个字段序列化成XML时应该叫什么名字、某个方法是否是webservice对外公开的网络方法等等。
    形式例如
    [Serilizeable]
    public class A
    {
    }

    "[]"括起来的东西就叫attribute。

    [] attribute便利签
    property 是在类里面的. 两者没有可比性啊




  • 相关阅读:
    网易云信流媒体服务端架构设计与实现
    从零开始搭建创业公司后台技术栈
    协程(coroutine)简介
    微服务的简介和技术栈
    分布式系统中最容易被忽视的六大“暗流”
    分布式架构的演进
    全网最详尽的负载均衡原理图解
    图解 | 搞定分布式,程序员进阶之路
    Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成
    Enterprise Library 3.0 发布
  • 原文地址:https://www.cnblogs.com/winner/p/636881.html
Copyright © 2011-2022 走看看