C#方法中使用ref和out参数

一、创建ref参数
在使用参数时,将参数传递给方法使用,而方法中对此值的任何改变并不能影响方法外部的变量。下面一个例子,控制台输出4,并没有对变量进行增量。例如:
    class ReforOut
    {
        static void Geti(int a)
        {
            a++;
        }
        public static void Main(string[] args)
        {
            int i=4;
            Geti(i);
            Console.WriteLine("i={0}",i);
            Console.ReadLine();
        }
    }
输出结果:形式参数i只是传递值,没有传递真正的变量i,所以变量i本身的值并没有改变。
但是,如果,我想通过Geti方法,去改变Main函数中变量i 的值,那么我们可以想象,如果变量i本身被传递到方法中,那么就可以完成变量i值被改变:这里要靠ref关键字来实现:
    class ReforOut
    {
        static void Geti(ref int a)
        {
            a++;
        }
        public static void Main(string[] args)
        {
            int i=4;
            Geti(ref i);
            Console.WriteLine("i={0}",i);
            Console.ReadLine();
        }
    }
输出结果:变量i本身加1.
二、创建out参数
Out参数与ref参数的作用是一样的,都是为了传递值变量的地址,是变量本身被方法改变。但所不同的是,ref参数要求变量在方法外初始化,而out参数则要求变量在方法内初始化。
将上面的例子改写成out参数:
    class ReforOut
    {
        static void Geti(out int a)
        {
            a = 4;
            a++;           
        }
        public static void Main(string[] args)
        {
            int i;
            Geti(out i);
            Console.WriteLine("i={0}",i);
            Console.ReadLine();
        }
    }
输出结果:i=5

时间: 2024-10-28 08:45:54

C#方法中使用ref和out参数的相关文章

浅谈C#中的ref和out参数

很多初学者(甚至是工作一定时间的开发人员),在遇到ref或者out参数时,总会有点"晕乎乎"或者疑惑,也不知道到底该在啥时候,啥场景下使用ref或者out参数. 本文将通过实例和说明,给大家详细讲解C#中的ref和out参数. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace RefAndOut { class Program { static

c#方法中调用参数的值传递方式和引用传递方式以及ref与out的区别深入解析

以下是对c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区进行了详细的分析介绍,需要的朋友可以过来参考下   复制代码 代码如下: #define Test using System; namespace Wrox.ProCSharp.ParameterTestSample ...{  class ParemeterTest  ...{     static void TestInt(int[] ints,int i)     ...{         ints[0] = 10

c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别

//#define Testusing System;namespace Wrox.ProCSharp.ParameterTestSample...{ class ParemeterTest ...{    static void TestInt(int[] ints,int i)    ...{        ints[0] = 100;        i = 100;    }     static void TestInt(int[] ints, ref int i)     ...{  

c#中ref和out参数使用时需要注意的问题

问题 昨天写了个关于socket接收udp包的程序,调用了socket.ReceiveFrom方法,发现了一个c#中关于ref和out参数传递时的问题,这里提出来和大家共同探讨一下,首先声明,下面的结论都是本人推测,还没有得到任何定论,若有错误请大家指正. 首先,ReceiveFrom方法的原型为 public int ReceiveFrom(byte[], ref EndPoint); 有一个为ref的EndPoint参数,用它来返回收到包的源地址信息,ref的语义是传引用,即对所传引用的修改

C#方法中的参数

C#中方法的参数有四种类型: ●值参数,不含任何修饰符. ●引用型参数,以ref修饰符声明. ●输出参数,以out修饰符声明. ●数组型参数,以params修饰符声明. 11.2.1 值参数 当利用值向方法传递参数时,编译程序给实参的值做一份拷贝,并且将此拷贝传递给该方法.被调用的方法不传经修改内存中实参的值,所以使用值参数时,可以保证实际值是安全的.在调用方法时,如果形式化参数的类型是值参数的话,调用的实参的值必须保证是正确的值表达式.在下面的例子中,程序员并没有实现他希望交换值的目的: 程序

C# 中的 Out 和 Ref 及Params 参数

  out 和ref 参数 经常用来通过方法传递参数来获取值,当您的方法不只有一个返回值的时候,这两个参数就发挥作用了.ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点. 在这篇文章里,我将解释如何在c#应用中使用这两个参数. 1.out 参数 out 方法参数关键字使方法引用传递到方法的同一个变量.当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中. public class mathClass{public static int TestOut

java-[Java]关于重载方法中的可变参数列表

问题描述 [Java]关于重载方法中的可变参数列表 <Thinking in Java>第105页有一句话不理解 如何理解你应该总是只在重载方法的一个版本上使用可变参数列表,或者压根就不是用它 解决方案 就是当重载一个方法时,选择其中的一个重载使用可变参数,其他的避免使用,否则编译的时候容易出问题.具体的参看http://www.cnblogs.com/lanxuezaipiao/p/3190673.html 解决方案二: 这个道理很简单,比如说你有foo(int x int ... args

jsp中页面间传汉字参数转码的方法

 这篇文章主要介绍了jsp中页面间传汉字参数转码的方法,有需要的朋友可以参考一下 转码:a.href="./showCont.jsp?tcontent="+encodeURI(encodeURI(tcontent));   解码:java.net.URLDecoder.decode((String)request.getParameter("tcontent"), "UTF-8");     例   a.jsp源代码 代码如下: <%@ p

JS中获取函数调用链所有参数的方法

  这篇文章主要介绍了JS中获取函数调用链所有参数的方法,本文直接给出代码示例,需要的朋友可以参考下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function getCallerArgument(){ var result = []; var slice = Array.prototype.slice; var caller = arguments.callee.caller;   while(caller){ result = result.conca