2013-03-17 64 views
4

我是一個新手,我想學C#的基礎知識。這聽起來可能很瑣碎,可能很愚蠢,但它是一個疑問。雖然經歷了應用程序的源代碼中的一個,我看到了一段代碼類瞭解get和set訪問

private string fname; 
public string FirstName 
{ 
    get 
    { 
     return fname 
    } 
    set 
    { 
     fname = value; 
    } 
} 

誰能告訴我這是什麼意思裏面。我明白,當我們宣佈一門課程時,我們使用別名FirstName訪問fname。如果出於某種安全目的,那麼是什麼?

+1

看看關於屬性的文章 - http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx – alex 2013-03-17 16:52:57

+3

我認爲這是有點關閉,iBlue應該有一個投票不知道這一點和只是問... – Paul 2013-03-17 16:55:23

+0

@Westie標題不是最好的,這往往會吸引迅速downvotes。 [在C#性質]的 – psubsee2003 2013-03-17 16:57:41

回答

4

這段代碼也等同於:

public string FirstName { get; set; } 

該做的是什麼定義一個property。在C#屬性中提供私有的封裝fields

+1

作爲由跟進,這還提供了添加驗證的位置(像防止第一名稱被分配一個空值,請確保它總是小寫等) – 2013-03-17 16:55:17

+0

但如何編譯器知道'FirstName'綁定到'fname'?謝謝。 – Sabuncu 2016-05-09 20:40:20

+0

與只有公有字符串名字有什麼不同? – RollRoll 2016-06-06 02:28:10

0

這就是所謂的屬性(MSDN article)。使用它們的原因是爲了封裝訪問某些類字段,以便在將來可以根據需要輕鬆更改類行爲。

這也等同於所謂的自動性能,因爲此時的屬性oftimedoes不添加任何邏輯:

public string FirstName { get; set; } 
2

FNAME是一個學科,具有私有可見,但名字是公共財產,因此它將在類的外部可見,並且可以包含獲取和設置方法中的邏輯

3

您可以在自己的屬性上編寫自定義邏輯。 F.e,一些驗證:

public string FirstName 
{ 
    get 
    { 
     return fname; 
    } 
    set 
    { 
     if (value.Count(s => Char.IsDigit(s)) > 0) 
     { 
      throw new Exception("Only letters allowed"); 
     } 
     fname = value; 
    } 
} 
+0

你得到跨越點,但可以提醒你不需要調用'ToCharArray'調用'IEnumerable'方法的人。 – ChaosPandion 2013-03-17 17:02:21

+0

行...我得到dat,但如何實現上述代碼,如果它像這樣的公共字符串FirstName {get;組; } – iJade 2013-03-17 17:04:26

+0

@ChaosPandion是的,你是對的。我已經更新了答案。 – 2013-03-17 17:05:14

0

get和set方法被調用訪問器(吸氣)和修改器(setter方法),這些方法用於訪問和變異的對象的屬性,而不允許從類的外部訪問。 看到變量fname的訪問修飾符是私有的,這意味着它只能被類內的任何方法訪問。

並注意get和set方法一般應給予公衆訪問修飾符它允許從任何外部類訪問的方法。