Effective C# 學習筆記 1

來源:互聯網
上載者:User

條款一:使用屬性代替可訪問的資料成員
1、在C#中屬性(property)在訪問時候看起來是資料成員,但卻是用方法實現的!可以對set訪問器做參數檢查!可以對屬性訪問添加多線程支援!
public class Person
{
    private string  name;
    public string Name
   {
            get
           {
                   lock(this)
                  {
                        return name;
                    }
             }
            set
           { 
                if(value=null||value.Length=0)
                     throw new ArgumentException("Name cannot be blank","Name");
                  name=value;
           }
   }
}

2、.net的資料繫結只支援屬性,不支援公有資料成員。因為將資料成員直接暴露給外界不符合物件導向的設計原則!

3、屬性可以定義唯讀,唯寫,讀寫的屬性。
public class Person //唯讀!
{
    private string  name;
    public string Name
   {
            get
           {
                        return name;
      
             }
   }
}

4、C#2.0可以用存取修飾詞修飾get,set訪問器因為他們在本質上都是成員函數,更好的控制屬性可見度!
public class Person
{
    private string  name;
    public string Name
   {
            get
           {
                        return name;
               
             }
            protected set
            {
                  name=value;
           }
   }
}

5、可以定義虛屬性和抽象屬性!
public class Person
{
    private string  name;
    public virtual string Name //虛屬性可以被override實現多態
   {
            get
           {
                        return name;  
             }
            set
           { 
                  name=value;
           }
   }
}
public interface IPerson
{
    string Name//抽象屬性繼承類型必須給出實現
   {
           get;
           set;
   }
}

6、用this關鍵字定義帶參數的屬性!
int [] values;
public int this[index]
{
    get
    {
        return values[index];
    }
    set
    {
        values[intex]=value;
    }
}

7、屬性和公有欄位產生的IL是不同的。訪問屬性和共有欄位的客戶代碼產生IL也是不同的。所以屬性和共有欄位在二進位上是不相容的!不能簡單的將共有欄位換成屬性。這樣必須重新編譯所有用到欄位的程式集!他們只在原始碼層次上是相容的!

8、因為JIT編輯器會對短的經常調用的方法進行內聯最佳化。(包括屬性訪問器)所以如果JIT內聯了屬性訪問器。那麼屬性和欄位的效率是沒有差別的。即使不內聯。效率差別也是可以忽略不計的。

綜上所述我們應該使用屬性!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.