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在设计上面十分精巧,兼顾了向下兼容性同时也很好的运用抽象的特点处理好了可为空的值类型的实现。

  • 相关阅读:
    sql server版本、组件和管理工具
    asp.net WebService如何去掉asmx后缀
    通过C#发送自定义的html格式邮件
    asp.net上传图片到服务器
    分享一个C#自定义事件的实际应用
    推荐一个ASP.NET网站内容管理系统源码
    asp.net读取模版并写入文本文件
    Win10命令提示符(cmd)怎么复制粘贴
    配置IIS的通配符应用程序映射
    用c-free 5写一个入门的程序
  • 原文地址:https://www.cnblogs.com/fanyong/p/2750258.html
Copyright © 2011-2022 走看看