C 屬性概述

2022-06-08 15:48:13 字數 3020 閱讀 7182

有乙個實現屬性的基本模式,該模式使用私有支援欄位來設定和檢索屬性值。get訪問器返回私有欄位的值,set訪問器在向私有字段賦值之前可能會執行一些資料驗證。 這兩個訪問器還可以在儲存或返回資料之前對其執行某些轉換或計算。

下面的示例闡釋了此模式。 在此示例中,timeperiod類表示時間間隔。 在內部,該類將時間間隔以秒為單位儲存在名為_seconds的私有欄位中。 名為hours的讀-寫屬性允許客戶以小時為單位指定時間間隔。getset訪問器都會執行小時與秒之間的必要轉換。 此外,set訪問器還會驗證資料,如果小時數無效,則引發 argumentoutofrangeexception。

c#複製

24)

throw new argumentoutofrangeexception(

$" must be between 0 and 24.");

_seconds = value * 3600;}}

}class program

"); }

}// the example displays the following output:

// time in hours: 24

">using system;

class timeperiod

set must be between 0 and 24.");

_seconds = value * 3600;}}

}class program

"); }

}// the example displays the following output:

// time in hours: 24

屬性訪問器通常由單行語句組成,這些語句只分配或只返回表示式的結果。 可以將這些屬性作為 expression-bodied 成員來實現。=>符號後跟用於為屬性賦值或從屬性中檢索值的表示式,即組成了表示式主體定義。

從 c# 6 開始,唯讀屬性可以將get訪問器作為 expression-bodied 成員實現。 在這種情況下,既不使用get訪問器關鍵字,也不使用return關鍵字。 下面的示例將唯讀name屬性作為 expression-bodied 成員實現。

c#複製

$" ";

}public class example

}// the example displays the following output:

// magnus hedlund

'>using system;

public class person

public string name => $" ";

}public class example

}// the example displays the following output:

// magnus hedlund

從 c# 7.0 開始,getset訪問器都可以作為 expression-bodied 成員實現。 在這種情況下,必須使用getset關鍵字。 下面的示例闡釋如何為這兩個訪問器使用表示式主體定義。 請注意,return關鍵字不與get訪問器搭配使用。

c#複製

_name;

set => _name = value;

}public decimal price

}class program

: sells for ");

}}// the example displays output like the following:

// shoes: sells for $19.95

'>using system;

public class saleitem

public string name

public decimal price

}class program

: sells for ");

}}// the example displays output like the following:

// shoes: sells for $19.95

在某些情況下,屬性getset訪問器僅向支援字段賦值或僅從其中檢索值,而不包括任何附加邏輯。 通過使用自動實現的屬性,既能簡化**,還能讓 c# 編譯器透明地提供支援字段。

如果屬性具有getset訪問器,則必須自動實現這兩個訪問器。 自動實現的屬性通過以下方式定義:使用getset關鍵字,但不提供任何實現。 下面的示例與上乙個示例基本相同,只不過nameprice是自動實現的屬性。 請注意,該示例還刪除了引數化建構函式,以便通過呼叫無引數建構函式和物件初始值設定項立即初始化saleitem物件。

c#複製

using system;

public class saleitem

public decimal price

}class program

; console.writeline($": sells for ");

}}// the example displays output like the following:

// shoes: sells for $19.95

Objective C中copy屬性的概述

規範上nsstring做屬性都是寫成copy的,理論上應該是複製了字串而不是單純的增加引用計數,其實問題只會出現在把nsmutablestring賦值給nsstring的時候。objective c inte ce demo nsobject property nonatomic,retain ns...

001 物件導向概述(一) 屬性

類屬性 類變數 靜態屬性 初始化 類變數名 初始值 訪問 在類定義的方法或者外部 中 類名.變數名 類屬性通過例項物件名來訪問,則屬於該例項的例項屬性 class person count 0 job 雇主 類屬性 defmain print person.job 通過類名訪問 p1 person ...

Xaml語法概述及屬性介紹

空間xmal每個元素都對應著乙個類,但是在xmal中,只提供類名是不夠的,需要知道該類實在.net的哪個命名空間下面.xaml解析器才能夠正確的解析.1 page 2x class 3xmlns 4xmlns x 5xmlns local 6xmlns d 7xmlns mc compatibili...