zoukankan      html  css  js  c++  java
  • 值类型,Nullable类型

     

    1. 值类型

    比如说int吧,是值类型,是个struct,是这样声明的

    public struct Int32 : IComparable, IFormattable, IConvertible, IComparable<Int32>, IEquatable<Int32>


    哪能看出来继承自ValueType?? 再说struct不是不能继承吗?为什么说继承自ValueType??

    直接打印int的基类确实显示基类是ValueType.

    Console.WriteLine(typeof(int));
    Console.WriteLine(typeof(int).BaseType);
    Console.WriteLine(typeof(int).BaseType.BaseType);
    
    /*输出:
    System.Int32
    System.ValueType
    System.Object
    */

    回答: ValueType的确是class,但是他的子类却是值类型,这是因为CLR对他的子类经过了特殊的处理.CLR若判断某类继承自ValueType,那么会在内存分配方面使它具有值类型的特征(例如直接分配在栈上),这和类库的继承层次结构并无多大关系。

    public abstract class ValueType

    C#这边的编译器也经过了特殊处理,使值类型在诸多方面不同于类类型,例如,我们不可以声明一个继承自ValueType的值类型等等. 简单的说微软对.net中的值类型做了特殊处理使其继承自ValueType.注:语法上struct是不允许继承的,但可以实现接口.觉得微软挺恶心的.老搞一些和语法不符的东西.

    public struct Int32可以认为是public class Int32 : ValueType的另外一种写法。

     

    2. Nullable类型

    public struct Nullable<T> where T : struct

    只支持值类型,表示可以为null的值类型变量。可以使用 ?放在值类型之后。 例如,在 C# 或 Integer? 的 int?

    对应于数据库表中可以为NULL的字段.

    static void Main(string[] args)
            {
                int? a;
                int? b;
    
                // Test null
                a = null;
                Console.WriteLine(a.HasValue);
                Console.WriteLine();
    
                // 
                a = 2;
                b = a;
                Console.WriteLine("a.HasValue = {0}, b.HasValue = {1}", a.HasValue, b.HasValue);
                Console.WriteLine("a = {0}", a.Value);
                Console.WriteLine("b = {0}", b.Value);
                Console.WriteLine();
    
                b = 3;
                Console.WriteLine("b = {0}", b.Value);
            }
  • 相关阅读:
    我不写博客的原因就是cnblogs不好用
    使用KeePass愉快的来管理你的密码
    Visual studio常用的code snippets
    日常工作小贴士
    win10下面visual studio, sublime ctrl+shift+f快捷键失效的原因
    Markdown常用语法对应
    常见的Message Queue应用场景
    二分查找(binary search)
    在ROS中使用花生壳的域名服务
    排序算法 选择排序(selection sort)
  • 原文地址:https://www.cnblogs.com/dirichlet/p/3264439.html
Copyright © 2011-2022 走看看