码迷,mamicode.com
首页 > 其他好文 > 详细

out,ref参数

时间:2015-10-16 15:12:30      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

 
class Method
    {
 
         // 值参数(Value Parameter):方法名称(参数类型 参数名称 [,参数类型 参数名称])
         // 引用参数(Reference Parameter):方法名称(ref 参数类型 参数名称 [,ref 参数类型 参数名称])
         // 输出参数(Output Parameter):方法名称(out 参数类型 参数名称 [,out 参数类型 参数名称])
 
        // 字符串在创建后就不能改变,但我们对其进行操作改变时,我们实际上操作的是它的一个副本,若要直接操纵它可以使用ref或out关键字
        // string和数组都是引用类型的变量
 
 
        // 值参数
        public static void ValueMethod(int i)
        {
            i++;
        }
        // 引用参数(ref):ref在使用前需要先初始化变量的值,在方法体外先初始化。
        public static void RefMethod(ref int i)
        {
            i++;
        }
        // 输出参数(out):out参数必须在方法体内初始化
        public static void OutMethod(out int i)
        {
            i = 0;
            i++;
        }
         
        // 可变参数params, params后面必须跟数组,之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字
        static int addi(params int[] values)
        {
            int sum = 0;
            foreach(int i in values)
            {
                sum = sum + i;
            }
            return sum;
        }
 
 
        // 主函数
        static void Main()
        {
            // 值参数
            int i = 0;// 这里声明变量 i ,那么在内存堆栈中就为i开了一个新的空间并存放它
 
            ValueMethod(i); // 执行函数后,ValueMethod中的 i 被加1,这里的参数 i 只是上面声明的变量 i  的一个拷贝,执行后,原始变量 i 没有改变
             
            Console.WriteLine("i=" + i);// 结果:i=0,说明这里的 i 和ValueMethod()函数里的 i 不是同一个 i
 
            //============================================================
 
 
            // 引用参数ref
 
            int j = 0; // ref 在使用前需要初始化变量的值。
 
            RefMethod(ref j);// ★ ref 相当于声明了一个指针,直接指向变量j,并操纵它,内存中j只有一个,未发生拷贝
 
            Console.WriteLine("j=" + j);// 结果:j=1,说明第一个j也变成了1,即内存中最原先的变量j的值变成了1
 
 
            //============================================================
 
 
            // 输出参数out
 
            int k; // 在这里不能对k初始化,如int k=0是不行的
 
            OutMethod(out k); // ★ out 和引用参数类型ref一样,操作的也只有一块内存地址
 
            Console.WriteLine("k=" + k); // 结果:k=1,这里说明用ref参数和用out参数得到的结果是一样的
 
            //★ ref和out雷同,主要的区别在于谁负责初始化
            //  ref 参数必须在使用前先初始化,也就是在方法体外初始化
            //  out 参数必须在方法体内初始化
 
 
            //==============================================================
 
 
            // 可变参数
 
            // 一般做法是先构造一个对象数组,然后将此数组作为方法的参数
            int[] arr = new int[3] { 1, 2, 3 };
            Console.WriteLine(addi(arr));
            // 而使用了params修饰方法参数后,我们可以直接使用一组对象作为参数
            Console.WriteLine(addi(1, 2, 3));
            Console.ReadKey();
        }
    }
//////////////////////////////////////////////////////////////////////////////
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            //a,b,c为testout的初始预备工作
            string a = "盖";
            string b = "房";
            string c=string.Empty;
            //在调用时,要特意为输出参数c加上out,不然报错哟
            testout(a,b,out c);
            //运行完testout方法后,可以在其它地方调用输出参数c的值
            label4.Text = c;
            
        }
        //声明一个带有输出OUT参数的方法,注意语法 out 数据类型 方法参数
        void testout(string x, string y, out string z)
        {
            z = x + y;
        }
    }

out,ref参数

标签:

原文地址:http://www.cnblogs.com/wswbk/p/4885075.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!