.NEt专家博客!
.net框架笔记——属性
上一篇 /
下一篇 2008-09-27 13:24:41
/ 个人分类:.NET框架技术
一.无参属性
通常被称为属性.
面向对象设计和编程的其中一个原则是数据封装.

CodeITPUB个人空间7H2l2CcMgvK
1
public class EmployeeITPUB个人空间'mq!N;{2@ tjz
2
{ITPUB个人空间p$~D[%I:rc
3
private string _name;
7dp7e4P&m hz!u,\x`p0 4
private int _age;
FRE.s&o3_-t0P0 5
n.RY!A)kh BM+?0 6
public string NameITPUB个人空间JT+f,l9D p?
7
{
`1Y4P*A)S0 8
get
|gR&S vD.k%`'V+?}g0 9
{ITPUB个人空间5h-|kd5J-Pk6Q*FiR
10
return _name;ITPUB个人空间/~$|1~#R'upZ+p
11
}
UT'b.j}7iA'`l012
setITPUB个人空间e0jd,c.II }5Q.E7t
13
{
+a,s"gA(j+A;P014
this._name = value;
q)slx%j1m015
}
P5]'dA/}
IH016
}ITPUB个人空间p1I2L6q%EE
17
public int Age
)X/E,z'd(S t"u018
{ITPUB个人空间H)p-x?o\tm
19
getITPUB个人空间:Ji5L T6w|k~e@
g L:B
20
{
F pc9L[
zl h)M2f021
return _age;
$g*zHjU&Cf022
}
}LRvY'Y)A023
set
!v.`_v{024
{ITPUB个人空间(~1Oa8U'gL/s
25
if (value < 0)
L Z;w2v)Af tA
j026
{
$l7j-skX&e6n027
throw new ArgumentOutOfRangeException("年龄不可能为负数");
F W%bj9qf028
}
K3Ow8ZBqc029
else
4~D`
b
JM&i5h7[030
this._age = value;ITPUB个人空间9CX)q%E1C8}
31
}
1_;SJ^h.v"Y7D0[j032
}
(L4PU\%E4^*q;d5A1f033
ITPUB个人空间&ij*Vf)A
34
}如果不封装,比如上面的年龄:就会有如下代码:

CodeITPUB个人空间5q0z M5@s_'F\vZ
public int height;//体重
5Ypm2TX0static void Main(string[] args)ITPUB个人空间_;{hDn b;[&l)T7E
{
,E1lKPH|z0 Employee employee = new Employee();
7e@ M1V'QFMa
I0ITPUB个人空间tA?yW+T
employee.Age = 12;ITPUB个人空间F:_bWJK
employee.Name = "dreamersjun";ITPUB个人空间3J9pZv5J4T9C!] I.A
employee.height = -12;//体重不会出现负数ITPUB个人空间_R&{S2P
AG}Y
ITPUB个人空间7ze!Jqk6[2|
Console.WriteLine(employee.Age);
*Bo8xn0c0bMu0 Console.WriteLine(employee.Name);ITPUB个人空间-_ s0zpu?"Y
HXV q
s%n
I'Bd0 //employee.Age = -1;
R.A-H%d!Mq!x'm0 ITPUB个人空间0B5qERky:YV
}
所以尽可能的封装字段.
当定义一个属性时,编译器会在生成的托管模块中产生以下3项:
1.一个表示属性的get访问器的方法.只有在为属性定义了get访问器方法时,才有这一项.
2.一个表示属性的set访问器的方法,只有在为属性定义了set访问器方法时,才有这一项.
3.一个位于托管模块元数据中的属性定义,不管是只读,只写,或者是读写属性都有这一项.
属性限制:
第一:属性不定义存储位置,所以不能以ref或out参数的形式传递给方法.
第二:属性不能重载.
第三:当调用get访问器时,属性不应该再改变存储变量的状态.
二:含参属性
在C#中称为索引器.通过索引器访问的每个元素都应该和索引器的基类型一致.参数index不必须是int类型,但因为索引器通常用于数组索引,所以index通常为int.
set访问器能接收隐含参数value,该参数包含赋给指定下标的元素的值.
使用索引器有两个限制.第一,因为索引器没有定义存储位置,所以索引器产生的值不能作为 ref参数或out参数传递给方法.第二:索引器必须是类的实例成员,不能被声明为static类型.
三:对访问器使用访问限定符
第一:只能改变set或get访问器之一的访问限定符,而不能是两者.
第二:访问限定符必须比属性或索引器的访问限制更严格.
相关阅读:
- SQL2005性能分析一些细节功能执行IO和执行计划 (iDotNetSpace, 2008-9-26)
- SQL2005性能分析:细节功能你是否用到? (iDotNetSpace, 2008-9-26)
- SQL 2005 中新的数据类型 (iDotNetSpace, 2008-9-26)
- SQL 2005 得到增强的功能 (iDotNetSpace, 2008-9-26)
- C# 与 Java 的不同点总结 (iDotNetSpace, 2008-9-26)
- GridView正反双向排序 (iDotNetSpace, 2008-9-26)
- Ajax.net Professional简介 (iDotNetSpace, 2008-9-26)
- ASP.NET 中 webservice.htc的作用 (iDotNetSpace, 2008-9-26)
- ASP.NET初步学习 (iDotNetSpace, 2008-9-26)
- c#的装箱和拆箱 (iDotNetSpace, 2008-9-26)
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG:
微软