Welcome

首页 / 软件开发 / .NET编程技术 / .net程序员的盲点(二) - 两个"属性"引起的歧义

.net程序员的盲点(二) - 两个"属性"引起的歧义2010-12-02两个“属性”引起的歧异-property和attribute的区别,这虽然 没有“一个馒头引发的血案”那么严重,但是也足以成为。net程序 员的技术盲点之二。

对于property和attribute这两个名词都叫“属性 ”的问题,来源于国内it书籍翻译界的疏忽。

其实它们来源于两个 不同的领域,attribute属于OOA/OOD的概念,而property属于编程语言中的概念 。下面我们来说明它们的异同。

Attribute

Attributes是 Microsoft .NET Framework文件的元数据,可以用来向运行时描述你的代码,或 者在程序运行的时候影响应用程序的行为。

Property

属性是面向 对象编程的基本概念,提供了对私有字段的访问封装,在中以get和set访问器方 法实现对可读可写属性的操作,提供了和灵活的数据访问封装。关于属性的概念 ,不是本文的重点,而且相信大部分的技术人员应该对属性有清晰的概念。以下 是简单的属性

区别

可以说两者没有可比性,只不过我们国家的语 言特点才引起的歧异,其实只要记住Attributes是派生于System,Attributes类 之下,它的主要作用是描述,比如在某一个自定义控件中的“属性” 就是指Attribute,

[DllImport ("User32.dll")]

Attribute也有很多系统的“默认 ”属性,见下表

预定义的属性 有效目标 说明

AttributeUsage Class 指定另一个属性类的有效使用方式

CLSCompliant 全部 指出程序元素是否与CLS兼容

Conditional Method 指出如果没有定义相关联的字符串,编译器就可以忽略对这个方法的任 何调用

DllImport Method 指定包含外部方法的实现的DLL位置

STAThread Method(Main) 指出程序的默认线程模型为 STA

MTAThread Method(Main) 指出程序的默认模型为多线程(MTA)

Obsolete 除了Assembly、Module、Parameter和Return 将一个元素标示 为不可用,通知用户此元素将被从未来的产品

ParamArray Parameter 允 许单个参数被隐式地当作params(数组)参数对待

Serializable Class 、Struct、enum、delegate 指定这种类型的所有公共和私有字段可以被串行化

NonSerialized Field 应用于被标示为可串行化的类的字段,指出这些 字段将不可被串行化

StructLayout Class、struct 指定类或结构的数据 布局的性质,比如Auto、Explicit或sequential

ThreadStatic Field( 静态) 实现线程局部(TLS)。不能跨多个线程共享给定的静态字段,每个线程 拥有这个静态字段的副本

而Property是指过程中的字段,也即类的 成员。如:

private int hour; //定义私有变量表示" 小时",外部是访问不到的。}

public int Hour// 定义 Hour程序接口

{

set { hour=value; }

get { return hour; }

}