簡體   English   中英

C#中“ get”和“ set”屬性的用途是什么

[英]What is the purpose of the “get” and “set” properties in C#

我看到了一些get set方法來設置值。 誰能告訴我這個目的?

public string HTTP_USER_NAME
{
      get 
      {
            return UserName; 
      }
      set 
      {
            UserName = value; 
      }
}

public string HTTP_USER_PASSWORD
{
      get 
      {
            return UserPwd; 
      }
      set 
      {
            UserPwd = value; 
      }
}

實際上為什么要使用這些東西。 對於全局訪問,還是這種原因還有其他原因嗎?

它們只是訪問器和更改器。 這就是在C#中實現屬性的方式

在C#3中,您可以使用自動實現的屬性,如下所示:

public int MyProperty { get; set; }

該代碼由編譯器自動翻譯為與您發布的代碼類似的代碼,該代碼更易於聲明屬性,如果您不想在setget方法中實現自定義邏輯,它們是理想的選擇,甚至可以使用set方法的另一個訪問器,使屬性不可變

public int MyProperty { get; private set; }

在前面的示例中, MyProperty將僅在聲明它的類之外讀取,對其進行更改的唯一方法是通過公開執行該操作的方法或僅通過該類的構造函數。 當您要控制並明確顯示實體的狀態更改時,這很有用

當您想向屬性添加一些邏輯時,您需要手動編寫屬性,就像您發布的那樣實現getset方法:

實現自定義邏輯的示例

private int myProperty;
public int MyProperty
{
   get
   {
       return this.myProperty;
   }
   set
   {
       if(this.myProperty <=5)
          throw new ArgumentOutOfRangeException("bad user");
       this.myProperty = value;
   }
}

好像您了解getter和setter的功能,其他人回答了這個問題。 “普通”類變量(無getter和setter)稱為“字段”,“ properties”(具有getter和setter)封裝字段。

屬性的目的是控制外部對字段的訪問。 如果希望變量對外部邏輯只讀,則可以省略設置器,如下所示:

private int dataID;

public int DataID {
    get { return dataID; }
}

您還可以將設置器設為私有,並實現相同的只讀功能。

如果某個對象有可能為空(無論出於何種原因),則可以保證實例始終存在,如下所示:

private Object instance;

public Object Instance {
    get {
        if (instance == null)
            instance = new Object();
        return instance;
    }
}

屬性的另一個用途是定義索引器。

//in class named DataSet

private List<int> members;

public int this[int index] {
    get { return members[index]; }
}

定義了該索引器之后,您可以訪問DataSet的實例,如下所示:

int member = dataSet[3];

檢查這些鏈接,..它們給出明確的解釋。

http://www.dotnetperls.com/property

http://code.anjanesh.net/2008/02/property-getters-setters.html

如果UserName和UserPwd是類變量,則最好像這樣使用

_userName 
_userPwd

在C#中實現屬性的標准方法。 UserNameUserPwd是定義了這兩種方法的類的私有成員變量( string類型)。

HTTP_USER_NAMEHTTP_USER_PASSWORD是您的課程的公共屬性。 UserNameUserPwd可以是您的私有字段。 並且您允許其他人通過這些公共屬性來設置或獲取值。 不能直接接觸私人財產。 同樣,您可以在property的get方法中進行一些邏輯處理。例如:您將擁有一個名為Age的公共屬性,在該方法的get方法中,您可以讀取私有字段“ dateOfBirth ”的值並進行一些計算( CurrentYear-dateOfBirth),並將其返回為Age。

屬性只是字段的訪問器。 它們允許執行某些操作(如果需要),並提供對字段的受控訪問。

如果您想知道何時使用屬性以及何時僅使用字段,請檢查鏈接“ 屬性與字段” –為什么如此? (喬納森·阿內賈)

屬性(C#編程指南)

屬性是提供靈活機制以讀取,寫入或計算私有字段的值的成員。 可以將屬性當作公共數據成員使用,但實際上它們是稱為訪問器的特殊方法。 這使數據易於訪問,並且仍然有助於提高方法的安全性和靈活性。

在此示例中, TimePeriod類存儲一個時間段。 在內部,該類以秒為單位存儲時間,但是名為Hours的屬性使客戶端可以以Hours為單位指定時間。 Hours屬性的訪問器在小時和秒之間執行轉換。

class TimePeriod
{
    private double seconds;

    public double Hours
    {
        get { return seconds / 3600; }
        set { seconds = value * 3600; }
    }
}


class Program
{
    static void Main()
    {
        TimePeriod t = new TimePeriod();

        // Assigning the Hours property causes the 'set' accessor to be called.
        t.Hours = 24;

        // Evaluating the Hours property causes the 'get' accessor to be called.
        System.Console.WriteLine("Time in hours: " + t.Hours);
    }
}
// Output: Time in hours: 24

屬性概述

  • 屬性使類可以公開獲取和設置值的公共方式,同時隱藏實現或驗證代碼。

  • 獲取屬性訪問器用於返回屬性值,而設置訪問器用於分配新值。 這些訪問器可以具有不同的訪問級別。 有關更多信息,請參見限制訪問者可訪問性(C#編程指南)

  • value關鍵字用於定義由set訪問器分配的值。

  • 未實現集合訪問器的屬性是只讀的。

  • 對於不需要自定義訪問器代碼的簡單屬性,請考慮使用自動實現的屬性的選項。 有關更多信息,請參見自動實現的屬性(C#編程指南)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM