003-可空类型 事件 简化委托

我们一直有这样一个问题,为什么值类型变量不能初始化为空?int i=null;这样写明显是错的,因为我们知道只有引用类型的变量才可以为设为null。其实在现实当中,我们也是需要让值类型变量为空的,这个问题经常出现在数据库问题中,因为这个原因,在c#中微软就出现了可空类型,nullable<T>,本章其实我们用的并不多,所以我们只是简单的了解一下,这个问题将会在数据库的章节中去学习到。

可空类型的核心是System.Nullable<T>与System.Nullable。这个就是一个类,这个现成类中有很多的方法其实我们就一点不奇怪了。下面是Nullable的代码:

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 ?

它是指定可空类型的一种快捷方式。所以,现在不需要写Nullable<byte>,写byte?就可以了。两者可以互换使用。写下来看代码:

 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);

好了,这就是代码。

接下来看??

空合并操作符  比如  first ??second  ,大职会经历一下的步骤:

对first进行求值。

如果结果为非空,则结果作为整个表达式的结果;

否则求second的值,其结果作为整个表达式的结果。

好了,这就是深入理解C#(三版)p110的原话,再加上一段代码就结束可空类型了:

DetaTime lastAlive =death??DateTime.Now;  这个就是一个简写的方式。

 

 

好了现在正式开始本章的重点,这个部分将会非常详细。

事件

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

posted @ 2019-07-15 15:47  jake_caiee  阅读(165)  评论(0编辑  收藏  举报