一周学会C#(属性二)

一周学会 C# (属性二)

C# 才鸟( QQ:249178521 )

5. set 语句

· **_ set _ ** ** 语句 ** ** **

w ** 是通过 ** **_ value _ ** **_ 标识符来进行赋值的 _ ** ** **

w ** 可以包含任何语句(甚至没有语句) ** ** **

** struct Time **

** { **

** ... **

** public int Hour **

** { **

** ... **

** set { **

** if (value < 0 || value > 24) **

** throw new ArgumentException("value"); **

** hour = value; **

** } **

** } **

** private int hour, minute, second; **

** } **

** Time lunch = new Time(); **

** ... **

** lunch.Hour = 12; **

当写一个属性的时候,属性的 set 语句自动运行。

在上面的例子中, Time 结构类有一个整型属性 Hour ,所以赋给这个属性的值必须是一个整型值。例如:

lunch.Hour = 12;

把一个整型值 12 赋给了 lunch 的 Hour 属性,这个语句会自动调用属性的 set 语句。 set 语句是通过 value 标识符来获得属性的赋值的。例如,如果 12 被赋给了 Hour 属性,那么 vaue 的值就是 12 。注意的是 value 不是一个关键字。 value 只是在 set 语句中才是一个标识符。你可以在 set 语句外的任何语句声明 value 为一变量的名字。例如:

public int Hour

{

get { int value; ... }// 正确

set { int value; ... }// 错误

}

6. 只读属性

l ** 只读属性只有 ** ** get ** ** 语句 ** ** **

Ø ** 任何写操作都会导致错误 ** ** **

Ø ** 就像一个只读字段 ** ** **

** struct Time **

** { **

** ... **

** public int Hour **

** { **

** get **

** { **

** return hour; **

** } **

** } **

** private int hour, minute, second; **

** } **

** Time lunch = new Time(); **

** ... **

** lunch.Hour = 12; // ** ** 错误 **

** ... **

** lunch.Hour += 2;// ** ** 错误 **

一个属性可以不必同时声明 get 语句和 set 语句。你可以只声明一个 get 语句。在这种情况下,属性是只读的,任何写的操作都会导致错误。例如,下面的语句就会导致一个错误:

lunch.Hour = 12;

因为 Hour 是只读属性。

但要注意的是,属性必须至少包括一个 get 或 set 语句,一个属性不能是空的:

public int Hour { }// 错误

7. 只写属性

l ** 只写属性只能有 ** **_ set _ ** ** ** ** 语句 ** ** **

Ø ** 任何读操作都是错误的 ** ** **

** struct Time **

** { **

** ... **

** public int Hour **

** { **

** set { **

** if (value < 0 || value > 24) **

** throw new OutOfRangeException("Hour"); **

** hour = value; **

** } **

** } **

** private int hour, minute, second; **

** } **

** Time lunch = new Time(); **

** ... **

** Console.WriteLine(lunch.Hour); // ** ** 错误 **

** ... **

** lunch.Hour += 12;// ** ** 错误 **

一个属性可以不必同时声明 get 语句和 set 语句。你可以只声明一个 set 语句。在这种情况下,属性是只写的,任何读的操作都会导致错误。例如,下面的语句就会导致一个错误:

Console.WriteLine(lunch.Hour);

因为 Hour 是只写属性。

而下面的例子则看上去好像是对的:

lunch.Hour += 2;

这句语句的实际运作是这样的:

lunch.Hour = lunch.Hour + 2;

它执行了读的操作,因此是错误的。因此,像 += 这种复合型的赋值操作符既不能用于只读属性,也不能用于只写属性。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus