.NEt专家博客!

.net框架笔记——属性

上一篇 / 下一篇  2008-09-27 13:24:41 / 个人分类:.NET框架技术

一.无参属性

通常被称为属性.

面向对象设计和编程的其中一个原则是数据封装.

 

ITPUB个人空间7H2l2CcMgv K
 1public class EmployeeITPUB个人空间'mq!N;{2@ tjz
 2    {ITPUB个人空间p$~D[%I:rc
 3       private string _name;
7dp7e4P&m h z!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           }

U T'b.j}7iA'`l0
12           setITPUB个人空间e0jd,c.II}5Q.E7t
13           {
+a,s"gA(j+A;P0
14               this._name = value;
q)s lx%j1m0
15           }

P5]'dA/} IH0
16       }
ITPUB个人空间p1I2L6q%EE
17       public int Age
)X/E,z'd(S t"u0
18       {ITPUB个人空间H)p-x ?o\tm
19           getITPUB个人空间:Ji5L T6w |k~e@ gL:B
20           {
F pc9L[ z lh)M2f0
21               return _age;
$g*zHjU&Cf0
22           }

}LRvY'Y)A0
23           set
!v.`_v{0
24           {ITPUB个人空间(~1Oa8U'gL/s
25               if (value < 0)
LZ;w2v)Af tA j0
26               {
$l7j-skX&e6n0
27                   throw new ArgumentOutOfRangeException("年龄不可能为负数");
F W%bj9qf0
28               }

K3Ow8ZBqc0
29               else
4~D` b JM&i5h7[0
30                   this._age = value;ITPUB个人空间9CX)q%E1C8}
31           }

1_;SJ^h.v"Y7D0[j0
32       }

(L4PU\%E4^*q;d5A1f0
33       ITPUB个人空间&ij*Vf)A
34    }

如果不封装,比如上面的年龄:就会有如下代码:

 

 

ITPUB个人空间5q0zM5@s_'F\vZ
 public int height;//体重
5Y pm2TX0
static void Main(string[] args)ITPUB个人空间_;{hDn b;[&l)T7E
        {
,E1lKPH|z0            Employee employee 
= new Employee();
7e @ M1V'Q FMa I0ITPUB个人空间tA?y W+T
            employee.Age 
= 12;ITPUB个人空间F:_b WJK
            employee.Name 
= "dreamersjun";ITPUB个人空间3J9pZv5J4T9C!] I.A
            employee.height 
= -12;//体重不会出现负数ITPUB个人空间_R&{S2P AG}Y
ITPUB个人空间7z e!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访问器之一的访问限定符,而不能是两者.

第二:访问限定符必须比属性或索引器的访问限制更严格.


TAG: 微软

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-12-05  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 67609
  • 日志数: 1924
  • 影音数: 7
  • 文件数: 1
  • 建立时间: 2008-01-04
  • 更新时间: 2008-12-05

RSS订阅

Open Toolbar