一週學會C#(屬性二)
C#才鳥(QQ:249178521)
5. set語句<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
· 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;
它執行了讀的操作,因此是錯誤的。因此,像+=這種複合型的賦值操作符既不能用於只讀屬性,也不能用於只寫屬性。