您的位置:首页 > 软件设计 > 面向对象 > 正文

C#中属性的用法

更多 时间:2013-11-26 类别:软件设计 浏览量:3009

C#中属性的用法

C#中属性的用法

属性的认识

属性是这样的成员:它提供灵活的机制来读取、编写或计算某个私有字段的值可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。这使得可以轻松访问数据,此外还有助于提高方法的安全性和灵活性。

属性结合了字段和方法的多个方面。对于对象的用户,属性显示为字段,访问该属性需要相同的语法。对于类的实现者,属性是一个或两个代码块,表示一个get访问器和/或一个set访问器。当读取属性时,执行get 访问器的代码块;当向属性分配一个新值时,执行set 访问器的代码块。不具有set 访问器的属性被视为只读属性。不具有get 访问器的属性被视为只写属性。同时具有这两个访问器的属性是读写属性。

与字段不同,属性不作为变量来分类。因此,不能将属性作为 ref(C# 参考)参数或out(C# 参考)参数传递。

属性具有多种用法:它们可在允许更改前验证数据;它们可透明地公开某个类上的数据,该类的数据实际上是从其他源(例如数据库)检索到的;当数据被更改时,它们可采取行动,例如引发事件或更改其他字段的值。

 

C#属性的声明

C#的属性采用如下方式进行声明:

attributes proterty-modifiers type member-name {accessor-declarations}

属性的修饰符property-modifiers有:

●new

●public

●protected

●internal

●private

●static

●virtual

●sealed

●override

●abstract

以上修饰符中,static,virtual,override和abstract修饰符不能同时使用。

属性的访问声明accessor-declaration必须用一对“{”和“}”大括号括起来,在其中给出对属性的值进行读写的操作说明。

虽然属性和域的语法比较类似,但不能把属性当做变量那样使用,也不能把属性作为引用型参数或输出参数来进行传递。

 

属性的代码形式

属性:get { //读属性代码 } set { //写属性代码 }

例如


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

 

说明

 

1、在属性的访问声明中:
●只有set访问器,表明属性的值只能进行设置而不能读出。
●只有get访问器,表明属性的值是只读的,不能改写。
●同时具有set访问器和get访问器,表明属性的值的读写都是允许的。


2、属性可以忽略get或set访问器,但是不能两个都忽略.
set访问器包含一个隐藏的参数value,该参数包含从客户代码传送过来的值.

3、字段使用camelCase(xxXxx),如dateOfBirth,而属性使用PacalCase(XxXxx),如DateOfBirth.一些开发人员喜欢在字段的开头使用下划线,如_Name,属性也应使用名词来命名.

4、c#通过属性特性读取和写入字段,而不直接读取和写入,以此来提供对类中字段的保护.

 

属性按可以访问的类型分为三种不同的类型:

 

一.读/写属性

读/写属性是一个具有get()和set()访问器的属性.

语法: [访问修饰符] 数据类型 属性
{
get{ };
set{ };
}

 

二.只读属性

仅具有get()访问器属性称为只读属性.

语法: [访问修饰符] 数据类型 属性名
{
get{ };
}

 

三.只写属性

仅具有set()访问器属性称为只写属性,不推荐使用只写属性.

语法: [访问修饰符] 数据类型 属性名
{
set{ };
}

 

属性的作用和注意事项

-充分体现了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问,即借助于get和set对属性的值进行读写;另一方面还可以对数据的访问属性进行控制(当然也可以通过对普通域加readonly关键字来实现。
-设计原则:属性封装了对域的操作。把要访问的域设为private,通过属性中的get和set操作对域进行设置或访问。


-不能把属性作为引用类型或输出参数来进行传递。
-get方法没有参数;set方法有一个隐含的参数value。除了使用了abstract修饰符的抽象属性,每个访问器的执行体中只有分号“;”外,其他的所有属性的get访问器都通过return来读取属性的值,set访问器都通过value来设置属性的值。
-采用间接方式来访问对象的属性(间接调用get、set方法):对象.属性 = 值(调用set),变量 = 对象.属性(调用get)。
-尽可能的使用属性(property),而不是数据成员(field)。

 

属性与函数比较


相似点

都包含执行代码

都可以有访问修饰符

都可以有virtual, abstract, override 修饰符

都可以用在接口中

 

不同点

属性只能拥有get/set 语句

属性不可以是void 型

属性不能使用参数

属性不能使用[ ] 参数

属性不能使用括号