ref、out 关键字

    class ParameterTest
    {
        static void Main(string[] args)
        {
            int i = 0;
            int[] ints = { 0, 1, 2, 4, 8 };

            Console.WriteLine("i = " + i);
            Console.WriteLine("ints[0] = " + ints[0]);

            SomeFunction(ints,i);
            Console.WriteLine("i = " + i);
            Console.WriteLine("ints[0] = " + ints[0]);

            Console.ReadKey();
        }

        static void SomeFunction(int[] ints,int i)
        {
            ints[0] = 100;
            i = 100;
        }
    }

    class ParameterTest
    {
        static void Main(string[] args)
        {
            int i = 0;
            int[] ints = { 0, 1, 2, 4, 8 };

            Console.WriteLine("i = " + i);
            Console.WriteLine("ints[0] = " + ints[0]);

            SomeFunction(ints,ref i);
            Console.WriteLine("i = " + i);
            Console.WriteLine("ints[0] = " + ints[0]);

            Console.ReadKey();
        }

        static void SomeFunction(int[] ints,ref int i)
        {
            ints[0] = 100;
            i = 100;
        }
    }

如果把一个参数传递给方法,且这个方法的输入参数钱带有ref关键字,则改方法对变量所做的任何改变都会影响原始对象的值。

    class OutTest
    {
        static void Main(string[] args)
        {
            int i;
            SomeFunction(out i);
            Console.WriteLine(i);

            Console.ReadKey();
        }

        static void SomeFunction(out int i)
        {
            i = 100;
        }
    }

变量如果未赋初始值而是用肯定会报错,而是用Out关键字之后可以解决这一问题

时间: 2024-10-11 00:30:11

ref、out 关键字的相关文章

Java中替代C# ref/out 关键字方案:

刚学习Java不久,今天遇到一个问题,需要在方法中修改传入的对象的值,确切的说是需要使用一个方法,创建一个对象,并把其引用返回,熟悉C#的我的第一反应就是C#中的ref/out关键字,结果发现Java中没有类似的关键字,所以只能想想如何解决此问题. 参数传递:方法的参数传递有两种,一种是值传递,一种是引用传递,但是其实都是拷贝传递. 值传递:就是把传递的[数据本身拷贝一份],传入方法中对其进行操作,拷贝的是值.引用传递:就是把指向某个对象的[引用拷贝一份],传入方法中通过此引用可以对对象进行操作

ref & out关键字

不多说,先看代码. namespace ConsoleApplication1{ public class Program { static void Main(string[] args) { //Normal string normal = "normal"; TestNormal(normal); Console.WriteLine(normal);           //输出Normal Console.ReadKey(); //Test Ref string tempRef

ref,out关键字的作用

ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点. 使用ref前必须对变量赋值,out不用 out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值,ref引用的可以修改,也可以不修改. 区别可以参看下面的代码: static void outTest(out int x, out int y) {//离开这个函数前,必须对x和y赋值,否则会报错. //y = x; //上面这行会报错,因为使用了out后,x和y都清空了,需要重新赋值,即

关于c#中”ref”和”out”关键字的一些理解

一. 综述(本文内容大部分来自网络,经本人整理而成,仅供学习参考,不免理解错误,欢迎批评指正) 在c#中,方法的参数传递有四种类型: (1) 传值参数(by value) 传值参数无需额外的修饰符.传值参数在方法调用过程中,如果改变了参数的值,那么传入方法的参数在方法调用完成以后并不因此而改变,而是保持原来传入的值.实际 上,传值参数传递的是调用参数的一份拷贝,因此在调用方法的过程中,即使改变了参数的值,也不会影响到实际传入的参数值,详见例程: (2) 传址参数(by reference) 传址

C#中ref和out的区别浅析

这篇文章主要介绍了C#中ref和out的区别浅析,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢,需要的朋友可以参考下 在C#中通过使用方法来获取返回值时,通常只能得到一个返回值.因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? MSDN:       ref 关键字使参数按引用传递.其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中.若要使用 ref 参数,则方法定义和调用方法都必

转载:C#中ref和out的区别浅析

这篇文章主要介绍了C#中ref和out的区别浅析,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢,需要的朋友可以参考下 在C#中通过使用方法来获取返回值时,通常只能得到一个返回值.因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? MSDN:        ref 关键字使参数按引用传递.其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中.若要使用 ref 参数,则方法定义和调用方法都

C# ref和out参数传递

Ref/Out关键字 Example: http://www.runoob.com/csharp/csharp-methods.html ref 关键字使参数按引用传递.其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中.若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字 out 关键字会导致参数通过引用来传递.这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化.若要使用 out 参数,方法定义和调用方法都必须

[C#基础]ref和out的区别

在C#中通过使用方法来获取返回值时,通常只能得到一个返回值.因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? MSDN:       ref 关键字使参数按引用传递.其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中.若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字.      out 关键字会导致参数通过引用来传递.这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始

C++混合编程之idlcpp教程Python篇(4)

上一篇在这 C++混合编程之idlcpp教程Python篇(3) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial2中,同样加入了三个文件 PythonTutorial2.cpp, Tutorial2.i, tutorial2.py.其中PythonTutorial2.cpp的内容基本和PythonTutorial1.cpp雷同,不再赘述.首先看一下Tutorial2.i的内容: namespace tutorial { struct Poi

C++混合编程之idlcpp教程Lua篇(4)

上一篇在这  C++混合编程之idlcpp教程Lua篇(3) 与前面的工程相似,工程LuaTutorial2中,同样加入了三个文件 LuaTutorial2.cpp, Tutorial2.i, tutorial2.lua.其中LuaTutorial2.cpp的内容基本和LuaTutorial1.cpp雷同,不再赘述. 首先看一下Tutorial2.i的内容: namespace tutorial { struct Point { float x; float y; meta: Point();