C#2.0泛型中的變化: default 關鍵字

來源:互聯網
上載者:User

今天回答別人問題的時候,才發現原先的T.default文法被取消了,使用了新的default關鍵字來實現這一功能。還好回複前動手試了一下,不然就...-_-b

下面詳細說明一下。之所以會用到default關鍵字,是因為需要在不知道型別參數為實值型別還是參考型別的情況下,為對象執行個體賦初值。考慮以下代碼:

class TestDefault<T>
    {
        public T foo()
        {
            T t = null; //???
            return t;
        }
    }

如果我們用int型來綁定泛型參數,那麼T就是int型,那麼注釋的那一行就變成了 int t = null;顯然這是無意義的。為瞭解決這一問題,引入了default關鍵字:

class TestDefault<T>
    {
        public T foo()
        {
                return default(T);
        }
    }

以下是測試用的代碼,看了之後就應該很快能明白,default關鍵字的作用:

 class Program
    {
        static void Main(string[] args)
        {
            TestDefault<int> t1 = new TestDefault<int>();
            int i = t1.foo();
            System.Diagnostics.Debug.Assert(i == 0);

            TestDefault<object> t2 = new TestDefault<object>();
            object o = t2.foo();
            System.Diagnostics.Debug.Assert(o == null);
        }
    }

最後說明一下,在.net 2.0的早期preview中,沒有default關鍵字,使用如下的方式實現default關鍵字的功能:

class TestDefault<T>
    {
        public T foo()
        {
                return T.default;
        }
    }

這段代碼在vs 2005 beta1中,已經不能通過編譯了。

相關文章

聯繫我們

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