【C#2.0】點滴(不斷補充中……)

來源:互聯網
上載者:User
1.Nullable類型可以這麼用!            int? cursor;

            //其它邏輯

            cursor = (++cursor) ?? default(int);

   上述代碼的含義是,如果cursor為空白值,則取int型的預設值0,否則,將cursor值增加1。特別注意++cursor,當cursor為空白值的時候,++cursor仍然返回空值(cursor+1同樣返回空值)。
    關於Nullable類型,有點覺得不是太好,那就是賦值的時候可以直接賦值,取值的時候卻要通過Value屬性擷取,比如   

             int? cursor;
            cursor = 5;  //直接賦值
            int x = cursor.Value; //通過value屬性取值

    如果能直接透明地取值就好了,比如像這樣            int? cursor;
            cursor = 5;  
            int x = cursor; 

2.關於泛型約束的思考
    曾經思考過這樣一個問題,在下面樣本的情況中,泛型是否有價值。比如,我想建立一個容器內,裝入容器內的元素必須實現了介面IComparable。    public class Container<T> where T : IComparable
    {
        private T[] innerArray;
    }

    public class Container2
    {
        private IComparable[] innerArray;
    }

    
    上面Container類使用了泛型和約束,Container2隻是一個簡單的類。表面看起來,Container2能夠做與Container一樣的事情,那麼泛型實現的Container有什麼優勢了?在於兩點:
(1)Container2 對象可以容納任意類型(只要實現了IComparable介面)的對象,而某個特定的Container對象只能容納特定類型(當然實現了IComparable介面)的對象。也就是說,Container2 中的元素的類型是多樣的,而某個特定的Container對象中的元素的類型卻是統一的。
(2)多繼承。如果元素類型要從IComparable和另外一個介面IExample繼承,那麼,如果不使用泛型實現,則一定會存在向下轉換的操作,而泛型實現可以避免這一點:    public class Container<T> where T : IComparable ,IExample
    {
        private T[] innerArray;        
    }

聯繫我們

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