zoukankan      html  css  js  c++  java
  • C#可空类型(Nullable Types)


    在讨论可空类型前,先回顾一下.NET 对于类型的定义: 
    ".NET 中类型分为值类型和引用类型,值类型不能为空,引用类型可为空"; 
    在这样的前提下,所有值类型都赋予了一个初始值例如:int i;(初始为0); 
    由于数据库中出现的对应的值类型可为空,这样就出现了两者不能对应的问题。 
    所有在C# 2.0中引入了可为空的值类型,强调一点可空类型对于是值类型而言。 
    实现方法如下: 

    int  i = 3;//一个值类型 
    int? k = 3;//一个可为空的值类型(简称可空类型) 
    int  m = null;//错误 
    int? j = null;//正确 

    从上面的例子我们可以看到在值类型后加上?可以定义一个可为空的值类型。 
    这里我们再深入考虑下面两个问题: 
    1,可空类型是否是一种新的.NET数据类型呢? 
    2,可空类型和一般值类型有哪些区别呢? 
    回答如下; 
    1,可空类型是否是一种新的.NET数据类型呢? 

    可空类型不是一种新的.NET数据类型。 
    实际上空类型是定义在.NET库中的一种范型类System.Nullable<T>,其中T就是可替换的值类型。 
    int? k = 3;同样可以写作System.Nullable<int> k = 3; 
    其中的操作是通过该类的运算符重载实现的。 
    2,可空类型和一般值类型有哪些区别呢? 
    主要区别是空类型并不是一种真正的类型,而是一个对象。 
    例如; 
    int? j = 3; 
    int k = 3; 
    在反编译器(ildasm.exe)下面的状态是 
    [mscorlib]System.Nullable`1<int32> i 
    [1] int32 k 
    并且同时对于执行了Nullable默认构造函数 
    instance void valuetype [mscorlib]System.Nullable`1<int32>::.ctor(!0) 
    .NET 2.0在设计上面十分精巧,兼顾了向下兼容性同时也很好的运用抽象的特点处理好了可为空的值类型的实现。

  • 相关阅读:
    织梦删除不需要的文件及文件安全设置
    织梦安全设置
    阿里云一个虚拟主机安装多个织梦系统
    显示织梦模板不存在的解决方法
    织梦安装
    织梦修改数据库密码
    CSS实现兼容性的渐变背景(gradient)效果
    css边框样式、边框配色、边框阴影、边框圆角、图片边框
    织梦后台编辑器添加中文字体
    织梦安装百度编辑器
  • 原文地址:https://www.cnblogs.com/fanyong/p/2750258.html
Copyright © 2011-2022 走看看