日期:2014-05-17  浏览次数:20788 次

引用类型的变量有时候需要加ref或者out才能返回改变的状态吗
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Reftest
{
    class Program
    {
        static ClassA mClassA;
        static void Main(string[] args)
        {
            ClassA.FillData(1, mClassA);
            foreach(int i in mClassA.numList)
            {
                Console.WriteLine(i);
            }
            Console.ReadLine();
        }
    }

    public class ClassA
    {
        public static ClassA classa = null;
        public List<int> numList = new List<int>();

        public static ClassA InitClassA()
        {
            if (classa == null)
            {
                classa = new ClassA();
            }
            return classa;
        }

        public static void FillData(int a, ClassA wclassa) 
        {
            wclassa = InitClassA();

            classa.numList.Add(a);
        }

    }
}

上面的代码会在foreach那行报mClassA为null错误,可是我明明在FillData方法里对mClassA做了初始化呀,怎么会为null,实在想不通,我这样做的目的是不使用FillData方法时不对mClassA初始化,使用此方法时才对唯一的mClassA实例进行初始化并进行操作

当我在FillData(int a, ClassA wclassa) 的参数wclassa前加ref时会出现正确结果,不是说类对象是引用类型的,不需要加ref吗,这是为什么呢?

下面是程序运行时图片
本来想传截好的图片的,可是网速不给力,老传不上来。

------解决方案--------------------
类对象是引用类型,但是你重新赋值,就不是引用的原来的对象了。
------解决方案--------------------
只是改变状态不需要加ref或out

你这里出错原因是你改变的不只是“状态”,而是引用本身被改了,所以要加out才行
------解决方案--------------------
public static void&nbs