c# ref
C# - ref
2016-01-21 13:27:00 weixin_34362790 阅读数 13

The ref keyword causes an argument to be passed by reference, not by value. The effect of passing by reference is that any change to the parameter in the called method is reflected in the calling method. For example, if the caller passes a local variable expression or an array element access expression, and the called method replaces the object to which the ref parameter refers, then the caller’s local variable or the array element now refer to the new object.

Note: Do not confuse the concept of passing by reference with the concept of reference types. The two concepts are not the same. A method parameter can be modified byref regardless of whether it is a value type or a reference type. There is no boxing of a value type when it is passed by reference.

To use a ref parameter, both the method definition and the calling method must explicitly use theref keyword. An argument that is passed to a ref parameter must be initialized before it is passed.

ref in C#
2010-09-10 10:38:00 lucky00_21 阅读数 295

  最近有人问到 ref 关键字的正确用法,下面我们来举例说明。另外在开始我们的例子之前,需要提前说明几点:

  • C# 中的数据有两种类型:引用类型(reference types)和值类型(value types)。 简单类型(包括int, long, double等)和结构(structs)都是值类型,而其他的类都是引用类型。 简单类型在传值的时候会做复制操作,而引用类型只是传递引用,就像 C++ 中的指针一样。
  • 在 C# 中,structs 和类有很大的区别。其中最大的区别(我个人觉得,同时也是容易忽略的一个地方)可能就是它是值类型,而不是引用类型。

 

  下面这段代码是 MSDN 中的例子:

// cs_ref.cs
using System;
public class MyClass 
{
  public static void TestRef(ref char i) 
  {
    // The value of i will be changed in the calling method
    i = 'b';
  }
   
  public static void TestNoRef(char i) 
  {
    // The value of i will be unchanged in the calling method
    i = 'c';
  }
   
  // This method passes a variable as a ref parameter; the value of the 
  // variable is changed after control passes back to this method.
  // The same variable is passed as a value parameter; the value of the
  // variable is unchanged after control is passed back to this method.
  public static void Main() 
  { 
    char i = 'a';    // variable must be initialized
    TestRef(ref i);  // the arg must be passed as ref
    Console.WriteLine(i);
    TestNoRef(i);
    Console.WriteLine(i);
  }
}

  大家很容易看出输出结果是:

b
b

 


 那么如果把这个例子做一些新的改动,将值类型(这里用的是 char)改成引用类型,程序运行又是什么效果呢?

// ----------------------------------------
// MyClass definition
public class MyClass
{
  public int Value;
}
 
 
// ----------------------------------------
// Tester methods
public static void TestRef(ref MyClass m)
{
  m.Value = 10;
}
 
public static void TestNoRef(MyClass m)
{
  m.Value = 20;
}
 
public static void TestCreateRef(ref MyClass m)
{
  m = new MyClass();
  m.Value = 100;
}
 
public static void TestCreateNoRef(MyClass m)
{
  m = new MyClass();
  m.Value = 200;
}
 
public static void Main()
{
  MyClass m = new MyClass();
  m.Value = 1;
   
  TestRef(ref m);
  Console.WriteLine(m.Value);
   
  TestNoRef(m);
  Console.WriteLine(m.Value);
   
  TestCreateRef(ref m);
  Console.WriteLine(m.Value);
   
  TestCreateNoRef(m);
  Console.WriteLine(m.Value);
}

输出结果是:

10
20
100
100

From:http://www.csharpwin.com/csharpspace/43.shtml

c# ref
2011-07-28 10:24:50 bupt_zoucq 阅读数 289

 ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字

传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化

        public void paramRef(ref String msg)
        {
            msg = msg + "zoucq";
        }

        public void paramRef(ref int i)
        {
            i = -1;
        }

 

            String refStr = "user:";
            paramRef(ref refStr);
            Console.WriteLine("测试ref参数,参数类型为String。\n调用之前,参数值:{0},调用之后理应为:{1},实际为{2}", "user", "user:zoucq", refStr);

            int refInt = 0;
            paramRef(ref refInt);
            Console.WriteLine("测试ref参数,参数类型为int。\n调用之前,参数值:{0},调用之后理应为:{1},实际为{2}", 0, -1, refInt);

C# ref
2012-11-02 11:54:00 weixin_33832340 阅读数 13

ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。

2018-07-20 12:34:39 qq_22868151 阅读数 23

              在没有学习ref和out之前,我们通过调用方法获取返回值时,只能得到一个返回值,因此,当一个方法需要返回多个值的时候,就要用到ref和out
            ref和out 关键字使参数按引用传递 
            ref 在使用之前必须初始化,out在使用之前不用初始化,初始化了带入方法的值也会被清空,但是out在方法中必须初始化
            在方法的参数和执行方法时,都要加reg和out
            out适合用在return多个返回值的地方,ref则用在需要被调用的方法修改调用的引用的地方

 public static void GetResultByRef(int num1, int num2,ref int sum,ref int sub)
        {
            sum = num1 + num2;
            sub = num1 - num2;
        }

        public static void GetResultByOut(int num1, int num2, out int sum, out int sub)
        {
            sum = num1 + num2;
            sub = num1 - num2;
        }

           

 

 

        int sum = 0;
        int sub = 0;
       GetResultByRef(6, 3, ref sum, ref sub);
            int sum;
            int sub;
            GetResultByOut(6, 4,out sum, out sub);
            Console.ReadKey();

      

ref(C# 参考)

阅读数 498

ref关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。 若要使用ref参数,则方法定义和调用方法都必须显式使用ref关键字。例如:classRefExample   {       staticvoidMethod(refinti)       {           i=44

博文 来自: freelove_2005

C# ref参数

阅读数 255

ref参数功能:ref关键字使用参数按引用进行传递,当控制权传递回调用方法时,在方法中对参数所做的任何改变都将直接反映在该变量中ref参数使用时需注意:  1.ref和out关键字类似于C中的指针变量一样。可以直接针对这个变量进行操作,而不是针对这个值得Copy进行操作  2.如果要使用ref参数,则方法定义和调用方法都必须使用ref关键字,传递到ref的参数必

博文 来自: yeyoushen000000

C# ref 关键字

阅读数 993

ref关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。若要使用ref参数,则方法定义和调用方法都必须显式使用ref关键字。例如:classRefExample{   staticvoidMethod(refinti)   {       i=44;   }   staticvoidMain()

博文 来自: richnaly

【C#】——Ref和Out

阅读数 45

今天看了看前几天看的C#视频,感觉之前学习的东西,有了更深刻的认识,所以特意分享一下。1、Ref和Out的相同点:二者均是方法的关键字,都是按地址传递。2、区别:Out:个人理解:如同方法的返回值一样,假设方法需要有两个返回值,但是方法的定义时候一般只有一个返回值,那么就采用Out关键字对其中一个参数就行修饰,让该参数达到返回值的作用。举例:staticvoid...

博文 来自: qizhi666

c# ref关键字

阅读数 30

C#语言参考<!---->ref(C#参考)<!----><!--Contenttype:DocStudio.Transform:devdiv2mtps.xslt.-->ref关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用ref参数,则方法定义和调...

博文 来自: iteye_18051
没有更多推荐了,返回首页