C#3.0新特性(三)-詳說自動屬性和匿名型別

來源:互聯網
上載者:User

寫在前邊:

不知道怎麼的,上一篇說放到首頁看看,今天來看才發現沒有放上去,做事情還真不細心,改、改、改!其實,早知道C# 4.0都有了,但是連C# 3.0都還沒有弄清楚,使用還是堅持這個系列,做完再寫C# 4.0吧。技術前輩們肯定早都知道這些東西了,不過呢,我也只是學習,只是把我的學習同大家分享而已!

一、自動實作屬性

全稱應該叫自動實作屬性(Auto-implemented properties),在上一篇中,給了簡單的例子,說的是當屬性訪問器中不需要其他邏輯時,自動實作屬性可使屬性聲明變得更加簡潔。如前邊的例子,在C# 2.0中:

private int m_one;
public int One
{
  get { return m_one; }
  set { m_one = value; }
}

這個屬性只有存(set)取(get)邏輯,沒有其它諸如動態分配、或是按條件存取的邏輯,在C# 3.0中,完全可以寫成:

public int One { get; set; }

從而不需要建立與該屬性對應的私人變數。

自動實作屬性必須同時聲明get和set訪問器。若要建立readonly自動實現屬性,請給予它private set訪問器。如:

public string Name { get; private set; }

這樣,這個屬性唯讀,不能對其進行存操作。那有人肯定要問,要給Name賦值,怎麼辦。仔細理解這個private set的含義,在物件導向的概念中,private表示在自己類的內部還是可以訪問的,也就是,這裡說的唯讀屬性,在定義這個屬性的類本身中,還是可以訪問的,如下:

public class EDClass
{
  public string Name { get; private set; }
  public EDClass()
  {
    Name = "qq";
  }
  public void setName()
  {
    Name = "qq";
  }
}

這樣是完全沒有問題的,但是,如果通過obj.Name = value肯定不行的,要不然就不叫readonly了。例如:

EDClass cls = new EDClass();
cls.Name = "qq";

報錯:The property or indexer 'CSharpStudy.EDClass.Name' cannot be used in this context because the set accessor is inaccessible

還有一點需要說明,自動實作屬性(Property) 不允許具有屬性 (Attribute)。如果您必須在屬性(Property) 的後備欄位上使用屬性(Attribute),則應該只建立常規屬性(Property)。好繞口,仔細分析這些概念,在物件導向的概念中,類的成員(member)又稱為屬性(Attribute),其實,在一般來講,在C++中稱為成員(Member)變數,在C#中稱為屬性(Attribute),或欄位。而這裡的自動屬性用的是Property,試想,定義了一個自動屬性:

public string Name { get; set; }

又想定義一個私人成員(屬性,Attribute)與之關聯:

private string _name;

不會報錯,但是肯定關聯不了,它只被認為是類的一個私人成員變數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.