2016-04-27 68 views
-2

我知道讀寫屬性之間的差異,C#我如何知道何時做一個屬性讀寫,而不是隻讀

我知道你只能讀取屬性讀取只有(只使用getter),但是當涉及到write關鍵字(setter)時,我如何知道應用此屬性的屬性?

簡而言之,我的問題是 - 當你申請獲取並設置訪問權限時,你問自己關於你正在編寫的屬性的問題?

我的下一個問題是,如果你不提供對該屬性的設置訪問權,它究竟如何定義?

謝謝堆,如果你幫我。

+0

二傳手讓你用這個屬性做什麼?如果您希望能夠這樣做,請編寫setter:通過賦值來設置屬性。 – Amy

回答

2

只讀屬性是由類決定的,類沒有任何東西可以改變。例如,考慮一個List<string>。它有一個Count屬性。這樣做是沒有意義的:

var list = new List<string>(); 
list.Count = 5; 

什麼設置只讀屬性?當項目添加到列表或從列表中刪除時,它的值會發生變化。這就是一個例子,其中一個屬性反映了一個類的內部狀態。另一個例子是StopWatch類。您無法設置ElapsedMilliseconds的值。該屬性取決於自時鐘開始以來經過了多少時間。

這是另一個例子。

public class Price 
{ 
    public decimal Amount {get; private set;} 
    public Price(decimal amount) 
    { 
     if(amount < 0) throw new ArgumentOutOfRangeException("amount", 
      "amount must be greater than zero."); 
     Amount = amount; 
    } 

    public Void Discount(decimal discountAmount) 
    { 
     if(discountAmount >= amount) 
      amount = 0 
     else 
      amount -= discountAmount; 
    } 
} 

Amount是隻讀的。有兩種方法可以設置Amount。一個是創建類時,通過向構造函數傳遞一個數量。

var myPrice = new Price(5); 

另一種是通過調用Discount方法。

myPrice.Discount(3); 

在這兩種情況下,類控制Amount是如何設置的,這樣就可以不將其設置爲負數。該類提供了允許更改其狀態的方法,但是它使得該更改確定允許進行哪些更改。

在某些情況下,您可能希望某個屬性或整個類是不可變的(不可更改),以便創建該類時確定的任何值都不會更改。

+0

感謝您花時間解釋這一點。 –

+0

其實真的很好的例子 –

+0

我的榮幸。如果是答案,請不要忘記標記爲答案。 –

0

你問自己你正在寫的房產 什麼問題,當你申請獲得並設置訪問權限?

簡單的說就是你是否允許你的類的用戶特定財產改變類已經被創建之後。他們所做的事情完全取決於班級。

我的下一個問題是,如果你不提供一個設置訪問屬性, 它究竟是如何定義的?

  1. 它可以通過構造函數來設置。它可能是一個參數,將 傳遞給構造函數,因此可以使用一些硬編碼值來提供 。
  2. 一些屬性可以被延遲實例化。想象一下,你有兩個名爲FistName和LastName的屬性。您有一個名爲FullName的最終屬性 ,它定義爲:

    result = this.FirstName +「」+ this.LastName;

希望這可以讓你開始在這個。如果您想更深入地研究,請查看[輸入鏈接描述] SOLID 1,您隨時可以通過Google瞭解有關屬性的更多信息。

+0

嗨TheEdge,謝謝。您提到「您班級的用戶」只是想要說明我的班級的用戶是誰?工程師協助編寫我的代碼或我的應用程序的用戶?你還提到「在課程創建後改變這個特定的屬性」。我在這方面的問題是 –

+0

偶然發送沒有完成以前的評論。在我的應用程序正式運行後,課程創建後意味着什麼?再次感謝。 –

+0

你的班級的用戶=任何人可以在代碼中訪問你的班級。這是任何人使用你的班級。因爲我不知道這個班是否在與其他人共享的集會中,所以可以通過Web API訪問的通用代碼我不能更明確。 – TheEdge

相關問題