亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

舉例講解C#中自動實現的屬性

 更新時間:2016年01月30日 14:53:30   投稿:goldensun  
這篇文章主要介紹了C#中自動實現的屬性,包括使用自動實現的屬性實現輕量類的方法,需要的朋友可以參考下

在 C# 3.0 及更高版本,當屬性訪問器中不需要任何其他邏輯時,自動實現的屬性會使屬性聲明更加簡潔。它們還允許客戶端代碼創(chuàng)建對象。當你聲明以下示例中所示的屬性時,編譯器將創(chuàng)建僅可以通過該屬性的 get 和 set 訪問器訪問的專用、匿名支持字段。
下列示例演示一個簡單的類,它具有某些自動實現的屬性:

// This class is mutable. Its data can be modified from
// outside the class.
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";}

  // .. Additional methods, events, etc.
}

class Program
{
  static void Main()
  {
    // Intialize a new object.
    Customer cust1 = new Customer ( 4987.63, "Northwind",90108 );

    //Modify a property
    cust1.TotalPurchases += 499.99;
  }
}

在 C# 6 和更高版本中,你可以像字段一樣初始化自動實現屬性:

public string FirstName { get; set; } = "Jane";

上一示例中所示的類是可變的。創(chuàng)建客戶端代碼后可以用于更改對象中的值。在包含重要行為(方法)以及數據的復雜類中,通常有必要具有公共屬性。但是,對于較小類或僅封裝一組值(數據)且只有很少行為或沒有行為的結構,則應該通過聲明 set 訪問器為 專用(對使用者的不可變)或通過聲明僅一個 get 訪問器 (除構造函數外都不可變),使對象不可變。
動實現的屬性上允許使用特性,但很明顯支持字段上不允許,因為不能從你的源代碼訪問它們。如果必須使用屬性的支持字段上的特性,只需創(chuàng)建一個常規(guī)屬性。

使用自動實現的屬性實現輕量類
本示例演示如何創(chuàng)建一個僅用于封裝一組自動實現的屬性的不可變輕型類。 當你必須使用引用類型語義時,請使用此種構造而不是結構。
可通過兩種方法來實現不可變的屬性。 可以將 set 取值函數聲明為 private。 屬性只能在該類型中設置,但它對于使用者是不可變的。 也可以僅聲明 get 取值函數,使屬性除了能在該類型的構造函數中設置,在其他任何位置都不可變。
當你聲明一個 private set 取值函數時,你無法使用對象初始值設定項來初始化屬性。 你必須使用構造函數或工廠方法。
示例
下面的示例演示了實現具有自動實現屬性的不可變類的兩種方法。 這兩種方法均使用 private set 聲明其中一個屬性,使用單獨的 get 聲明另一個屬性。 第一個類僅使用構造函數來初始化屬性,第二個類則使用可調用構造函數的靜態(tài)工廠方法。

// This class is immutable. After an object is created, 
  // it cannot be modified from outside the class. It uses a 
  // constructor to initialize its properties. 
  class Contact
  {
    // Read-only properties. 
    public string Name { get; }
    public string Address { get; private set; }

    // Public constructor. 
    public Contact(string contactName, string contactAddress)
    {
      Name = contactName;
      Address = contactAddress;        
    }
  }

  // This class is immutable. After an object is created, 
  // it cannot be modified from outside the class. It uses a 
  // static method and private constructor to initialize its properties.  
  public class Contact2
  {
    // Read-only properties. 
    public string Name { get; private set; }
    public string Address { get; }

    // Private constructor. 
    private Contact2(string contactName, string contactAddress)
    {
      Name = contactName;
      Address = contactAddress;        
    }

    // Public factory method. 
    public static Contact2 CreateContact(string name, string address)
    {
      return new Contact2(name, address);
    }
  }

  public class Program
  { 
    static void Main()
    {
      // Some simple data sources. 
      string[] names = {"Terry Adams","Fadi Fakhouri", "Hanying Feng", 
               "Cesar Garcia", "Debra Garcia"};
      string[] addresses = {"123 Main St.", "345 Cypress Ave.", "678 1st Ave",
                 "12 108th St.", "89 E. 42nd St."};

      // Simple query to demonstrate object creation in select clause. 
      // Create Contact objects by using a constructor. 
      var query1 = from i in Enumerable.Range(0, 5)
            select new Contact(names[i], addresses[i]);

      // List elements cannot be modified by client code. 
      var list = query1.ToList();
      foreach (var contact in list)
      {
        Console.WriteLine("{0}, {1}", contact.Name, contact.Address);
      }

      // Create Contact2 objects by using a static factory method. 
      var query2 = from i in Enumerable.Range(0, 5)
             select Contact2.CreateContact(names[i], addresses[i]);

      // Console output is identical to query1. 
      var list2 = query2.ToList();

      // List elements cannot be modified by client code. 
      // CS0272: 
      // list2[0].Name = "Eugene Zabokritski"; 

      // Keep the console open in debug mode.
      Console.WriteLine("Press any key to exit.");
      Console.ReadKey();        
    }
  }

輸出:

  Terry Adams, 123 Main St.
  Fadi Fakhouri, 345 Cypress Ave.
  Hanying Feng, 678 1st Ave
  Cesar Garcia, 12 108th St.
  Debra Garcia, 89 E. 42nd St.

編譯器為每個自動實現的屬性創(chuàng)建了支持字段。 這些字段無法直接從源代碼進行訪問。

相關文章

  • c#系列 list詳情

    c#系列 list詳情

    這篇文章主要介紹了c#系列 list,list 本質是一個數組,。就跟我們操作系統(tǒng)一樣,提前申請內存大小。所以我們程序一般都有一個申請內存,實際使用內存,內存碎片這幾個概念,下面?zhèn)z看文章詳細內容吧
    2021-10-10
  • 基于C#實現的HOOK鍵盤鉤子實例代碼

    基于C#實現的HOOK鍵盤鉤子實例代碼

    這篇文章主要介紹了基于C#實現的HOOK鍵盤鉤子實例,需要的朋友可以參考下
    2014-07-07
  • C#/VB.NET 實現在PDF表格中添加條形碼

    C#/VB.NET 實現在PDF表格中添加條形碼

    條碼的應用已深入生活和工作的方方面面。在處理條碼時,常需要和各種文檔格式相結合。本文,以操作PDF文件為例,介紹如何在編輯表格時,向單元格中插入條形碼,需要的可以參考一下
    2022-06-06
  • WinForm實現同時讓兩個窗體有激活效果的特效實例

    WinForm實現同時讓兩個窗體有激活效果的特效實例

    這篇文章主要介紹了WinForm實現同時讓兩個窗體有激活效果的特效實例,基于windows api實現一個窗體激活的時候給另外一個發(fā)消息的特效,在進行C#項目開發(fā)時有一定的實用價值,需要的朋友可以參考下
    2014-09-09
  • C#控制臺實現飛行棋游戲

    C#控制臺實現飛行棋游戲

    這篇文章主要為大家詳細介紹了C#控制臺實現飛行棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • c#?COM組件原理詳解

    c#?COM組件原理詳解

    本文主要介紹了c#?COM組件原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-08-08
  • c#中文gbk編碼查詢示例代碼

    c#中文gbk編碼查詢示例代碼

    c#中文gbk編碼查詢示例,大家參考使用吧
    2013-12-12
  • C#實現Winform無邊框移動的方法

    C#實現Winform無邊框移動的方法

    這篇文章主要介紹了C#實現Winform無邊框移動的方法,涉及C#針對WinForm窗口操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • .NET使用IResourceMonitor實現獲取資源信息

    .NET使用IResourceMonitor實現獲取資源信息

    在 Microsoft.Extensions.Diagnostics.ResourceMonitoring 包提供了一系列定制 API,專用于監(jiān)視 .NET 應用程序的資源利用率,本文將利用IResourceMonitor來實現獲取資源狀態(tài)信息,感興趣的可以了解下
    2024-01-01
  • 經典排序算法之冒泡排序(Bubble sort)代碼

    經典排序算法之冒泡排序(Bubble sort)代碼

    這篇文章主要介紹了經典排序算法之冒泡排序(Bubble sort)代碼的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06

最新評論