Re: [問題] 新手學C#,有關{get;set;}的疑問
看板C_Sharp (C#)作者BigLoser (Looking for job)時間10年前 (2014/12/12 00:08)推噓5(5推 0噓 21→)留言26則, 3人參與討論串2/5 (看更多)
這為溫拿您好,
大魯蛇我很弱,若有講錯,還請版友指正,
首先我想您需要官網的文件,
http://msdn.microsoft.com/zh-tw/library/67ef8sbd.aspx
以下例子取自官網,
public class CalendarEntry
{
//所以我們先定義這個東西叫做Field(欄位),也就是你說的member variable
private DateTime date;
//這個東西叫做Property(屬性)
public DateTime Date
{
get
{
return date;
}
set
{
date = value;
}
}
}
接下來看一下,屬性概觀:
1. 屬性讓類別能夠在隱藏實作或驗證程式碼的同時,以公開的方式取得並設定值。
2. get 屬性存取子是用來傳回屬性值,而 set 存取子是用來指定新值。
這些存取子可能具有不同的存取層級。
3. value 關鍵字的用途是定義由 set 存取子所指定的值。
4. 沒有實作 set 存取子的屬性就是唯讀的。
5. 針對不需要自訂存取子程式碼的簡單屬性,請考慮使用自動實作的屬性。
關於自動實作的屬性:
在 C# 3.0 與以後的版本,自動實作屬性讓屬性宣告更為簡明,而且在屬性的存取子
(Accessor) 中也不需要額外的邏輯。 這些存取子也可以讓用戶端程式碼建立物件。
當您宣告如下列範例所示的屬性時,編譯器便會建立私用 (Private) 的匿名支援欄位
,讓您只能透過屬性的 get 和 set 存取子來進行存取。
class Customer
{
// Auto-Impl Properties for trivial get and set
public double TotalPurchases { get; set; }
public string Name { get; set; }
public int CustomerID { get; set; }
// Constructor
public Customer(double purchases, string name, int ID)
{
TotalPurchases = purchases;
Name = name;
CustomerID = ID;
}
// Methods
public string GetContactInfo() {return "ContactInfo";}
public string GetTransactionHistory() {return "History";}
}
補充:
對於只是封裝一組值 (資料) 與只有少數或沒有任何行為的小型類別或結構,
則建議將 set 存取子宣告為 private,以便將物件設為不可變的。
// Read-only properties.
public string Name { get; private set; }
public string Address { get; private set; }
之後我看了幾個官網上的範例,似乎沒有你說的這種寫法,
public static String KeyName() {
get {
return System.Web.Configuration.
WebConfigurationManager.AppSettings["KeyName"];
}
}
我覺得應該是這樣才對(拿掉那個括號),讓他為靜態屬性,而非靜態方法。
public static String KeyName {
get {
return System.Web.Configuration.
WebConfigurationManager.AppSettings["KeyName"];
}
}
--
我覺得C#是世界上最強的語言了 紅膠咖咖希希C ◥▁▁▁▁ ◢ 麥
其他的應該廢除 寶水啡啡嘉 # ◤ ██ /- 科
石 腳 嘉 □–□◢◤ 舒
如果各位有興趣的話,可以現在開始學 本 ▼ㄑ ◢ 服
但是要安裝VisualStudio ▼ㄧ /◣ 特
因為我們只會支援精英IDE,絕對不會接受垃圾 ψdohProject ◢ /◣– ◤ /█◣
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 113.61.160.93
※ 文章網址: http://www.ptt.cc/bbs/C_Sharp/M.1418314103.A.D1A.html
推
12/12 00:17, , 1F
12/12 00:17, 1F
既然那個括弧是打錯的,那
public static String KeyName {
get {
return System.Web.Configuration.
WebConfigurationManager.AppSettings["KeyName"];
}
}
就是屬於這個類別的唯讀靜態屬性,
那我想這個倒是沒有甚麼問題,不過可能你是想問說他寫成這樣也沒有簡寫阿
的確,這個時候回頭看我文章上面的
5. 針對不需要自訂存取子程式碼的簡單屬性,請考慮使用自動實作的屬性。
{set;get;} 是用在簡單屬性的狀況下,如果你要做驗證如,
public int Age
{
get
{
return age;
}
set
{
if(value >= 0)
{
age = value;
}
else
throw new ArgumentOutOfRangeException();
}
}
這種狀況就不能簡寫了。
※ 編輯: BigLoser (113.61.160.93), 12/12/2014 00:23:38
→
12/12 00:21, , 2F
12/12 00:21, 2F
→
12/12 00:22, , 3F
12/12 00:22, 3F
→
12/12 00:23, , 4F
12/12 00:23, 4F
→
12/12 00:24, , 5F
12/12 00:24, 5F
→
12/12 00:25, , 6F
12/12 00:25, 6F
→
12/12 00:26, , 7F
12/12 00:26, 7F
→
12/12 00:26, , 8F
12/12 00:26, 8F
推
12/12 00:27, , 9F
12/12 00:27, 9F
→
12/12 00:29, , 10F
12/12 00:29, 10F
→
12/12 00:30, , 11F
12/12 00:30, 11F
→
12/12 00:31, , 12F
12/12 00:31, 12F
→
12/12 00:31, , 13F
12/12 00:31, 13F
→
12/12 00:37, , 14F
12/12 00:37, 14F
推
12/12 00:56, , 15F
12/12 00:56, 15F
→
12/12 00:57, , 16F
12/12 00:57, 16F
→
12/12 00:59, , 17F
12/12 00:59, 17F
→
12/12 01:03, , 18F
12/12 01:03, 18F
→
12/12 01:04, , 19F
12/12 01:04, 19F
→
12/12 01:05, , 20F
12/12 01:05, 20F
推
12/12 01:08, , 21F
12/12 01:08, 21F
→
12/12 01:09, , 22F
12/12 01:09, 22F
http://msdn.microsoft.com/zh-tw/library/system.datetime.now%28v=vs.110%29.aspx
public static DateTime Now { get; }
DateTime saveNow = DateTime.Now;
※ 編輯: BigLoser (113.61.160.93), 12/12/2014 01:10:09
推
12/12 01:13, , 23F
12/12 01:13, 23F
→
12/12 01:19, , 24F
12/12 01:19, 24F
→
12/12 01:19, , 25F
12/12 01:19, 25F
→
12/12 01:19, , 26F
12/12 01:19, 26F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 5 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章