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;  这个就是一个简写的方式。

 

 

好了如今正式开始本章的重点,这个部分将会很是详细。

事件

咱们知道委托的意思就是间接完成某项操做

相关文章
相关标签/搜索