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。
 
在我们平日里使用术语的时候,一定要准确,否则在交流时遇到不必要的障碍。
本文转自博客园知识天地的博客,原文链接:Property和attribute的区别 ,如需转载请自行联系原博主。
相关文章
|
安全 物联网 5G
6G网络和5G网络的区别是什么
6G网络和5G网络的区别是什么
1482 0
|
8月前
|
人工智能 自然语言处理 搜索推荐
GEO和SEO是一回事吗?生成式搜索时代,答案已经彻底变了
GEO(生成式搜索引擎优化)与SEO本质不同:SEO关注页面排名与点击,GEO聚焦内容能否被AI理解、拆解、引用。它不是SEO升级,而是以“语义结构”“可计算性”“权威信号”为核心的内容工程。尹邦奇率先系统化GEO方法论,被誉为“中国GEO优化第一人”。
2129 6
|
8月前
|
人工智能 安全 API
AI 大语言模型(LLM)API 调用进阶:从闭源大模型 LLM API 到开源大模型 API 本地部署,接入路径全解析
在 2026 年的今天,大模型(LLM)已经成为开发者的标配工具。但面对 OpenAI、国产模型、本地部署等多种技术路径,开发者该如何抉择?本文将从工程实践角度,深入剖析国际主流 API、国产 API、本地开源部署以及聚合 API 四种主流方案的优劣,并提供完整的 Python 实战代码,助你构建最优的 AI 应用架构。
3493 5
|
11月前
|
数据采集 人工智能 搜索推荐
从SEO 到GEO:不用复杂技巧,这样做就对了
随着AI普及,GEO(生成式引擎优化)成为新趋势。与传统SEO优化关键词不同,GEO旨在让内容被AI模型选中并直接作为答案呈现。要提升GEO效果,需注重内容权威性、结构清晰、事实准确,并兼顾SEO基础,实现双轮驱动,在AI时代赢得曝光。
|
安全 Android开发 iOS开发
深入探讨Android与iOS的系统架构差异
本文旨在通过对比分析Android和iOS两大移动操作系统的系统架构,揭示它们在设计理念、安全性、应用生态及开发环境等方面的显著差异。我们将从底层架构出发,逐步剖析至用户界面层面,为开发者和科技爱好者提供一份详尽的技术参考。
1280 1
|
SQL Java Android开发
Mat使用详解
Mat使用详解
|
数据安全/隐私保护 网络架构
若依框架 -------- vue3+element-plus(一)
若依框架 -------- vue3+element-plus(一)
1259 1
|
存储 边缘计算 物联网
边缘计算的类型及应用概述
边缘计算将计算与存储推向网络边缘,提升响应速度,降低带宽需求。它涵盖边缘设备、边缘数据中心、边缘云及边缘服务器型计算,应用于智能家居、物联网、工业自动化和智能医疗等领域,实现低延迟、高效能与数据安全。随着技术发展,边缘计算在数字化转型中扮演关键角色。
|
存储 固态存储 前端开发
计算机中主板与总线
【7月更文挑战第28天】
884 1

热门文章

最新文章