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);
            }
  • 相关阅读:
    jQuery 请指出'$'和'$.fn'的区别?或者说出'$.fn'的用途。
    ie8及其以下浏览器的document.getElementsByClassName兼容性问题
    document.all的详细解释(document.all基本上所有浏览器可用!)
    CSS浮动属性Float介绍
    JCarouselLite--帮助文档
    css定位之z-index问题分析
    Android手机同步电脑端google chrome书签
    AWK原理及命令和文件输入
    Sed命令
    Shell正则表达式
  • 原文地址:https://www.cnblogs.com/dirichlet/p/3264439.html
Copyright © 2011-2022 走看看