请问一下什么是空引用?如何去用它,而且用的时候会有什么限制?

解决方案 »

  1.   

    空引​用不引用任何内容
    “空引用”是某个类“类型”的变量引用了一个null。具体来说,就是类被初始化,不指向任何具体的某个实例化的类。
      

  2.   

    null?所谓空引用,就是某一类型的变量未和该类型的一个具体对象对应起来,而是和一个空值对应起来了
    在声明引用类型变量的时候如果未赋初值的话,其值默认为null空引用
    当创建的托管对象没有任何变量引用它时,就具备了垃圾回收条件如何去用它? 需要清除变量引用的对象时可以再次为其赋值为null.比如Graphics g=....,如果明确以后不应再使用或者防止它人误用,而又没有走出作用域,可以g.Dispose(),g=null,因为在调用一个空引用变量类型的成员函数时,会明确抛出一个异常. 而调用一个Dispose()的Graphics对象的成员函数时会发生什么? 没试过有什么限制?声明引用类型变量时未赋初值其值自动为空引用,其它情况看自己需要,有些时候为了某种目的可能要明确赋null值,而更经常的情况是不用理会
      

  3.   

    比如object obj = null;
    该表达式表示的意思就是一个“空引用”,就是声明obj指向的一个内存地址,而将该内存地址的值设置为null
      

  4.   

    yangglemu兄
    有几个地方我想反驳一下  有可能我没有理解你的原意  如果有什么冒犯的地方请原谅 
    string a;
    这是声明引用,我反驳的地方就是这个状态系统并不会默认a为null  而应该是【未被使用】。
    如果这样的状态去参与变量的话  会出错的
    比如
    string a;
    if(a == null) 编译的时候就会出错
    所以必须要赋值
    string a = null;
    这个状态才是真正的a为null状态,引用类型包含一个地址或者引用,它指向内存中特定的位置,如果设置为null,那么显示的设置引用,让它不指向任何地方。
    如有不对的地方请见谅
      

  5.   

    假设用什么“内存地址”的概念来解释,而且又在解释中引入了“这个地址的值为null”,这是车轱辘话地用你要解释的东西来作为解释,越来越乱。
      

  6.   

    快乐乔巴兄弟,我可能没表述明确,我说的是类的全局变量,而不是函数中的局部变量
    比如
    class Test
        {
            string s;
            public Test()
            {
                if (s == null)
                    Console.WriteLine("null");
            }
        }
    编译的时候会警告:从未对字段“ConsoleApplication1.Test.s”赋值,字段将一直保持其默认值 null
    可以证实未赋初值的类的全局变量(引用类型),其值默认为null.如果是值类型,比如int,其值将默认为0
      

  7.   

    yangglemu兄
    顺便问一下为什么成员变量和局部变量会有这样的差异呢
      

  8.   

    任何引用类型实例的默认初始值都是null...“未被使用”仅仅是编译器发现了你会在它为null时试图使用它...16楼的例子仅仅是编译器认为s在为null时你并没有试图使用它...至于那个Test方法...对不起,编译器并不知道你会何时调用它,也就无从知道s在使用时是否为null...有没有问题是你的问题不是编译器的问题...与类级还是什么级变量没有任何关系...