Attribute 字段
Property 属性(get;set;)

属性的正常写:

private string name;

public string Name {
get { return name; }
set { name = value; }
}

简写:(自动属性)

public string Name { get; set; }

然后 编译器 会转换成 正常写法

l  Property就是访问字段(成员变量,Field)提供的一种方式(set/get)

l  Property是C#中引入的一种语言特性,把C++中的一些编程技巧上升到语法的地位。这种特性就是把类数据成员声明为私有的,而提供公有的方法实现对他们的访问。

l  Property可以说是一个面向对象的概念,提供了对私有字段的访问封装,在C#中以get和set访问器方法实现对可读可写属性的操作,提供了安全和灵活的数据访问封装。比如:

public class Robot
{  private string name = "";   //字段:Field  public string Name          //属性:Property,对Field进行封装。  {  get { return name; }  set { name = value; }  }
} 

l  Property是指类向外提供的数据区域,是智能的字段,其中有get和set访问器来完成字段的取值和赋值。而Attribute则是描述对象在编译时或运行时属性的。这两者是有本质区别的,一个是属性,用于存取类的字段,一个是特性,用来标识类,方法等的附加性质。

Attribute,还是Property

Attribute和Property都能翻译成“属性”,有的地方用attribute表示“属性”,有的地方又在用roperty,初学者常常在这两个单词间“迷失”,甚至认为二者没有差别,是相同的。可是attribute不等于property。二者之间到底有何差别?

我们从OOA/OOD(object oriented analysis / object oriented design,面向对象分析和设计)说起。在OOA/OOD中的使用attribute表示属性,指对象(object)的特征(feature)。我们在一些编程语言(如c#、Delphi等)中遇见的“属性”一词,为何是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

Operation

Method

Member Function

Method

OOA/OOD中的方法(method)是指对象的操作(operation)。在C++中称为member function(成员函数),而在C#中还是叫做method。在表中加入对方法(method)的称呼:

也能看出,C++中将attribute称为member variable,将method称为member function,其实还是非常贴切的。从本质上说,确实是在声明变量、定义函数。后来者(C#等)可能觉得这样的称呼不够OO(object oriented,面向对象),于是做了些改动。method延用OOA/OOD的称呼不用说,但将attribute称作field,总觉得欠妥。因为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”则完全和OOA/OOD中的“Attribute” 完全不一样了,而是c#(net)全新引入的一个概念。

MSDN官方的解释如下:

公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。

说的通俗些Attribute是类,不过是一类比较特殊的类,Attribute必须写在一对方括号中,用来处理.NET中多种问题:序列化、程序的安全特征等等,在.NET中的作用非同凡响

C#中Property和Attribute的区别 - 乔闻 - 博客园

C#中Property和Attribute的区别相关推荐

  1. DOM中Property与Attribute的区别

    property和attribute的汉语翻译几乎相同,都有"属性"的意义(这里姑且称attribute为"特性",以方便区分),而他们的取值也经常相同,但有时 ...

  2. JavaScript 中 Property 和 Attribute 的区别

    转自:http://www.cnblogs.com/elcarim5efil/p/4698980.html property 和 attribute非常容易混淆,两个单词的中文翻译也都非常相近(pro ...

  3. 【译】详解HTML中property和attribute的区别

    翻看Vue API文档时发现v-bind有一个修饰符.prop比较特殊: .prop - 作为一个 DOM property 绑定而不是作为 attribute 绑定. 文档还给了一个stack ov ...

  4. Property 和 Attribute 的区别(转)

    property 和 attribute非常容易混淆,两个单词的中文翻译也都非常相近(property:属性,attribute:特性),但实际上,二者是不同的东西,属于不同的范畴. property ...

  5. HTML property 和 attribute 的区别

    前端编程里,property 和 attribute 是一对极容易混淆的术语. Angular 的属性绑定语法: <img [src]="itemImageUrl"> ...

  6. property和attribute的区别

    property是指类向外提供的数据区域. 而attribute则是描述对象在编译时或运行时属性的,分为固有型和用户自定义型,其中用户自定义型可以利用Reflection在运行期获取. 这两者是有本质 ...

  7. css property 和 attribute 的区别

    css property可以包含下列这些属性: Value: legal values & syntax Initial: initial value Applies to: elements ...

  8. 一个简单的例子学习 HTML 元素property和attribute的区别

    源代码: <html> <style> </style><button disabled>Click</button> <button ...

  9. 区别C#中的两个属性(Property和Attribute)

    区别C#中的两个属性(Property和Attribute) 在C#中有两个属性,分别为Property和Attribute,两个的中文意思都有特性.属性之间,但是用法上却不一样,为了区别,本文暂把P ...

最新文章

  1. segMatch:基于3D点云分割的回环检测
  2. (转)线程安全的CopyOnWriteArrayList介绍
  3. python软件代码示例-用Python写一个模拟qq聊天小程序的代码实例
  4. 006_FastDFS文件上传
  5. 基于socket的线上聊天框
  6. 由VMWorld2010想到的Social Media宣传
  7. Hyper-V Server共享VHDX
  8. rxjs里的Observable对象subscribe方法的执行原理
  9. JavaScript知识笔记(一)——入门、语句、注释、变量、函数、输出内容、对话框、窗口
  10. 用计算机弹正义之道,正义之道
  11. 自学python能找到工作吗-学习Python真的能找到工作吗?
  12. 2018-01-29(HTML+CSS)
  13. 【Mybatis】mybatis的小细节
  14. 基于halconc++坏点簇检测算法
  15. 手把手带你玩转Spark机器学习-深度学习在Spark上的应用
  16. word如何导出PDF格式
  17. 无法登录 mysql 服务器_无法登录 MySQL服务器/无法开启 MySQL服务
  18. 芬兰建筑师帕特里克•艾瑞克森先生一行再次到访云创
  19. bindingResult
  20. panabit之Web认证

热门文章

  1. visio版本要和word匹配吗_office2016各个版本 以及 解决visio搜索任何都提示无匹配项问题...
  2. AttributeError: module cv2.face has no attribute 'createEigenFaceRecognizer'
  3. 运放输入偏置电流方向_运放参数的详细解释和分析-part1,输入偏置电流和输入失调电流【TI FAE 分享】...
  4. 阿里fastjson将集合转为树形结构【非原创】
  5. android 权限开启回调,Android M请求onSurfaceTextureAvailable回调权限不在活动
  6. IT行业岗位以及发展方向
  7. 【新塘N76E003】NU-LINK脱机烧写
  8. java map 需要回收吗_weakMap 和 map 的垃圾回收对比
  9. 基于PHP+MySQL的美容会所企业资产管理系统
  10. 个人微信公众号对接自动回复电影网站接口又能实现菜单功能