最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

舉例講解C#中自動(dòng)實(shí)現(xiàn)的屬性

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

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

// 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 和更高版本中,你可以像字段一樣初始化自動(dòng)實(shí)現(xiàn)屬性:

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

上一示例中所示的類是可變的。創(chuàng)建客戶端代碼后可以用于更改對(duì)象中的值。在包含重要行為(方法)以及數(shù)據(jù)的復(fù)雜類中,通常有必要具有公共屬性。但是,對(duì)于較小類或僅封裝一組值(數(shù)據(jù))且只有很少行為或沒有行為的結(jié)構(gòu),則應(yīng)該通過聲明 set 訪問器為 專用(對(duì)使用者的不可變)或通過聲明僅一個(gè) get 訪問器 (除構(gòu)造函數(shù)外都不可變),使對(duì)象不可變。
動(dòng)實(shí)現(xiàn)的屬性上允許使用特性,但很明顯支持字段上不允許,因?yàn)椴荒軓哪愕脑创a訪問它們。如果必須使用屬性的支持字段上的特性,只需創(chuàng)建一個(gè)常規(guī)屬性。

使用自動(dòng)實(shí)現(xiàn)的屬性實(shí)現(xiàn)輕量類
本示例演示如何創(chuàng)建一個(gè)僅用于封裝一組自動(dòng)實(shí)現(xiàn)的屬性的不可變輕型類。 當(dāng)你必須使用引用類型語義時(shí),請(qǐng)使用此種構(gòu)造而不是結(jié)構(gòu)。
可通過兩種方法來實(shí)現(xiàn)不可變的屬性。 可以將 set 取值函數(shù)聲明為 private。 屬性只能在該類型中設(shè)置,但它對(duì)于使用者是不可變的。 也可以僅聲明 get 取值函數(shù),使屬性除了能在該類型的構(gòu)造函數(shù)中設(shè)置,在其他任何位置都不可變。
當(dāng)你聲明一個(gè) private set 取值函數(shù)時(shí),你無法使用對(duì)象初始值設(shè)定項(xiàng)來初始化屬性。 你必須使用構(gòu)造函數(shù)或工廠方法。
示例
下面的示例演示了實(shí)現(xiàn)具有自動(dòng)實(shí)現(xiàn)屬性的不可變類的兩種方法。 這兩種方法均使用 private set 聲明其中一個(gè)屬性,使用單獨(dú)的 get 聲明另一個(gè)屬性。 第一個(gè)類僅使用構(gòu)造函數(shù)來初始化屬性,第二個(gè)類則使用可調(diào)用構(gòu)造函數(shù)的靜態(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.

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

相關(guān)文章

  • C#創(chuàng)建數(shù)據(jù)庫及導(dǎo)入sql腳本的方法

    C#創(chuàng)建數(shù)據(jù)庫及導(dǎo)入sql腳本的方法

    這篇文章主要介紹了C#創(chuàng)建數(shù)據(jù)庫及導(dǎo)入sql腳本的方法,涉及C#針對(duì)數(shù)據(jù)庫的創(chuàng)建、連接、導(dǎo)入等相關(guān)操作技巧,需要的朋友可以參考下
    2015-12-12
  • C#實(shí)現(xiàn)生成指定圖片的縮略圖

    C#實(shí)現(xiàn)生成指定圖片的縮略圖

    這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)生成指定圖片的縮略圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • 基于C#實(shí)現(xiàn)宿舍管理系統(tǒng)

    基于C#實(shí)現(xiàn)宿舍管理系統(tǒng)

    這篇文章主要介紹了如何利用C#語言開發(fā)一個(gè)簡易的宿舍管理系統(tǒng),文中的實(shí)現(xiàn)步驟講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定參考價(jià)值,感興趣的可以了解一下
    2022-06-06
  • Unity實(shí)現(xiàn)卡片循環(huán)滾動(dòng)效果的示例詳解

    Unity實(shí)現(xiàn)卡片循環(huán)滾動(dòng)效果的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Unity實(shí)現(xiàn)卡片循環(huán)滾動(dòng)的效果,文中的實(shí)現(xiàn)步驟講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-12-12
  • C#實(shí)現(xiàn)子窗體與父窗體通信方法實(shí)例總結(jié)

    C#實(shí)現(xiàn)子窗體與父窗體通信方法實(shí)例總結(jié)

    這篇文章主要介紹了C#實(shí)現(xiàn)子窗體與父窗體通信方法,實(shí)例總結(jié)了常用的四種窗體通信方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • 淺談C# 抽象類與開閉原則

    淺談C# 抽象類與開閉原則

    這篇文章主要介紹了C# 抽象類與開閉原則的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 如何利用c#實(shí)現(xiàn)通用守護(hù)進(jìn)程

    如何利用c#實(shí)現(xiàn)通用守護(hù)進(jìn)程

    這篇文章主要給大家介紹了關(guān)于如何利用c#實(shí)現(xiàn)通用守護(hù)進(jìn)程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • C#使用GUID(全局統(tǒng)一標(biāo)識(shí)符)

    C#使用GUID(全局統(tǒng)一標(biāo)識(shí)符)

    這篇文章介紹了C#使用GUID(全局統(tǒng)一標(biāo)識(shí)符)的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái)的操作方法

    C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái)的操作方法

    這篇文章主要介紹了C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái),上傳視頻功能,主要要解決兩個(gè)問題,一是在服務(wù)端通過C#生成簽名和SDKID,二是在客戶端通過JavaScript上傳視頻到騰訊云點(diǎn)播服務(wù)器,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • Unity3D實(shí)現(xiàn)扭動(dòng)擠壓瀏覽效果

    Unity3D實(shí)現(xiàn)扭動(dòng)擠壓瀏覽效果

    這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)扭動(dòng)擠壓瀏覽效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02

最新評(píng)論

榆林市| 静宁县| 清流县| 阿鲁科尔沁旗| 土默特右旗| 成都市| 滨州市| 泊头市| 怀集县| 九台市| 内江市| 新邵县| 宁夏| 莆田市| 精河县| 霍邱县| 吴旗县| 新竹县| 卢龙县| 梨树县| 象山县| 平潭县| 高唐县| 长寿区| 电白县| 荆州市| 余江县| 连云港市| 工布江达县| 台安县| 奈曼旗| 二连浩特市| 灌云县| 金寨县| 辽宁省| 泽库县| 和政县| 比如县| 册亨县| 潜江市| 宁化县|