003-可空類型 事件 簡化委託

咱們一直有這樣一個問題,爲何值類型變量不能初始化爲空?int i=null;這樣寫明顯是錯的,由於咱們知道只有引用類型的變量才能夠爲設爲null。其實在現實當中,咱們也是須要讓值類型變量爲空的,這個問題常常出如今數據庫問題中,由於這個緣由,在c#中微軟就出現了可空類型,nullable<T>,本章其實咱們用的並很少,因此咱們只是簡單的瞭解一下,這個問題將會在數據庫的章節中去學習到。數據庫

可空類型的核心是System.Nullable<T>與System.Nullable。這個就是一個類,這個現成類中有不少的方法其實咱們就一點不奇怪了。下面是Nullable的代碼:c#

static void Display(Nullable<int> x)
        {
            Console.WriteLine("HasValue :{0}", x.HasValue);
            if(x.HasValue)
            {
                Console.WriteLine("Value:{0}", x.Value);
                Console.WriteLine("Explict conversion: {0}", (int)x);
            }
            Console.WriteLine("GetValueOrDefalut():{0}", x.GetValueOrDefault());
            Console.WriteLine("GetvalueOrDefalut(10): {0}", x.GetValueOrDefault(10));
            Console.WriteLine("ToString(): \"{0}\"", x.ToString());
            Console.WriteLine("GetHashCode(): {0}", x.GetHashCode());
            Console.WriteLine();
        }

 static void Main(string[] args)
        {
            Nullable<int> x = 5;//這個隨即是什麼值,在下面的值纔是x的初始值
            x = new Nullable<int>(5);
            Console.WriteLine("Instance with value:");
            Display(x);

            x = new Nullable<int>();
            Console.WriteLine("Instance without value:");
            Display(x);
}

這個類就是和其餘的類同樣,你須要實例化,而後你能夠在其實調用方法,每一個方法都會有它的功能。其實可空類型的部分並非不少,總結一下就是初始化 ? ??這三個方法的使用。接下來咱們就會簡單的瞭解一下,開始進入本章的重點,事件與進入快速通道的委託。學習

1 ?spa

它是指定可空類型的一種快捷方式。因此,如今不須要寫Nullable<byte>,寫byte?就能夠了。二者能夠互換使用。寫下來看代碼:code

 int? nullable = 5;
            object boxed = nullable;
            Console.WriteLine(boxed.GetType());

            int normal = (int)boxed;
            Console.WriteLine(normal);

            nullable = (int?)boxed;
            Console.WriteLine(nullable);

            nullable = new int?();
            boxed = nullable;
            Console.WriteLine(boxed == null);
            nullable = (int?)boxed;
            Console.WriteLine(nullable.HasValue);

好了,這就是代碼。orm

接下來看??blog

空合併操做符  好比  first ??second  ,大職會經歷一下的步驟:事件

對first進行求值。string

若是結果爲非空,則結果做爲整個表達式的結果;it

不然求second的值,其結果做爲整個表達式的結果。

好了,這就是深刻理解C#(三版)p110的原話,再加上一段代碼就結束可空類型了:

DetaTime lastAlive =death??DateTime.Now;  這個就是一個簡寫的方式。

 

 

好了如今正式開始本章的重點,這個部分將會很是詳細。

事件

咱們知道委託的意思就是間接完成某項操做

相關文章
相關標籤/搜索