精华内容
下载资源
问答
  • c# ref局部变量
    2020-03-03 00:34:15

    using System;
    class Simple
    {
    private int score = 5; //声明赋值
    public ref int RefToVal() //建立方法

    {
        return ref score; //返回局部变量
    }
    public void Display() //建立方法
    {
        Console.WriteLine($"Value inside class object:{score}");//查看变量赋值
    }
    

    }
    class Program
    {
    static void Main()//主执行程序
    {
    Simple mod = new Simple();//分配空mod间
    mod.Display();//执行display()方法,看此时变量数

        ref int mod1 = ref mod.RefToVal();//建立局部变量,此时mod1和mod指向同一堆中空间
    
        mod1 = 10;//改变其中一个赋值
        mod.Display();//检查另一个赋值是否改变
    
    
    }
    

    }

    ref不return就会返回值而不是引用。

    更多相关内容
  • C#ref&out详解

    2020-05-30 21:46:11
    1.首先需了解C#中的引用类型与值类型 1.值类型:基本数据类型 2.引用类型:所有的类都是引用类型 (引用类型与值类型区别这里不做研究) 3.特别注意下string是引用类型(这里也不做研究) 2.值类型的ref&out 1.创建...

    1.首先需了解C#中的引用类型与值类型

    1.值类型:基本数据类型
    2.引用类型:所有的类都是引用类型
    (引用类型与值类型区别这里不做研究)
    3.特别注意下string是引用类型(这里也不做研究)

    2.值类型的ref&out

    1.创建三种不同参数的函数
    ①.参数无ref和out关键字
    ②.参数有ref关键字
    ③.参数有out关键字

    class RefAndOutDemo
        {
            //创建三个函数对num进行赋值和输出
            public void Test(int num)
            {
                num = 100;
                Console.WriteLine("Test:"+num);
            }
            public void RefTest(ref int num)
            {
                num = 100;
                Console.WriteLine("RefTest:"+num);
            }
            public void OutTest(out int num)
            {
                num = 100;
                Console.WriteLine("OutTest:"+num);
            }
        }
    

    2.注意:
    在进行out参数函数实现过程中发现必须首先对传入的参数进行赋值,否者报错
    未num对num赋值代码报错

    3.测试

    1.调用这三个函数,调用的函数有ref和out参数时参数前面也要加上ref和out

    static void Main(string[] args)
            {
                //定义三个数字
                int num = 50;
                int refnum = 50;
                int outnum = 50;
                RefAndOutDemo demo = new RefAndOutDemo();
                Console.WriteLine("-----参数无ref和out关键字");
                Console.WriteLine("before Test:" + num);
                demo.Test(num);
                Console.WriteLine("after Test:" + num);
                Console.WriteLine("-----参数有ref关键字");
                Console.WriteLine("before RefTest:" + refnum);
                demo.RefTest(ref refnum);
                Console.WriteLine("after RefTest:" + refnum);
                Console.WriteLine("-----参数有out关键字");
                Console.WriteLine("before OutTest:" + outnum);
                demo.OutTest(out outnum);
                Console.WriteLine("after OutTest:" + outnum);
                Console.ReadKey();
            }
    

    2.运行结果
    运行结果
    3.可以发现

    • 无ref和out关键值得参数在执行函数后数值未发生改变
    • 有ref和out关键字修饰的参数执行后数值发生改变

    4.归纳总结

    • 如果有学习过C\C++同学可以将ref int 或者 out int 理解成 int * 或者 int & 类型
    • 当你在使用ref传递参数的时候,ref修饰的参数必须要有值,但是out可以使用一个未赋值的变量作为参数传递并且out在传入时必须先赋值
    展开全文
  • c# ref和out参数区别

    2021-01-22 09:49:13
    ref和out相同点 它们都是传址的,执行方法后,原来的值都改变了 二. ref和out不同点 使用ref时,传入的参数必须初始化;而使用out时不用初始化。 ref能把参数的值传进方法;而out要把参数清空(即使参数已经...

    一. ref和out相同点

     它们都是传址的,执行方法后,原来的值都改变了

    二. ref和out不同点

    1. 使用ref时,传入的参数必须初始化;而使用out时不用初始化。
    2. ref能把参数的值传进方法;而out要把参数清空(即使参数已经赋值也要清空),退出方法时,所有out参数都必须赋值。

    三. 示例代码

    using System;
    class RefOutTest
    {
        static void refTest(ref int a, ref int b)
        {
            a = 10;
            b = a;
        }
    
        static void outTest(out int a, out int b)
        {
          //离开这个方法前,必须对 a 和 b 赋值,否则会报错。
            a = 10;
            b = 20;
        }
    
        static void Main()
        {
            int a = 1, b = 2;
            refTest(out a, out b);
            Console.WriteLine("a = {0}, b = {1}", a, b);
    
            int x,y;
            outTest(out x, out y);
            Console.WriteLine("x = {0}, y = {1}", x, y);
        }
      }

     

    展开全文
  • 当你在C#参数列表中说“ref”时,你真正说的更像是一个“指针指针”。你说的是,在方法中,你要替换的不是对象的内容,而是对对象本身的引用,在代码中调用你的方法。除非这是你的意图,那么你应该直接传递引用...

    在C#中,当你看到一个引用类型的东西(即用类而不是struct声明的类型)时,你基本上总是通过一个指针来处理对象。在C中,默认情况下,一切都是一个值类型,而在C#中,默认情况下,一切都是一个引用类型。

    当你在C#参数列表中说“ref”时,你真正说的更像是一个“指针指针”。你说的是,在方法中,你要替换的不是对象的内容,而是对对象本身的引用,在代码中调用你的方法。

    除非这是你的意图,那么你应该直接传递引用类型;在C#中,传递引用类型很便宜(类似于在C中传递引用)。

    学习/了解C#中的值类型和引用类型之间的差异。它们是该语言中的一个主要概念,如果您尝试在C#领域中使用C对象模型,则事情会变得非常混乱。

    以下是基本上语义相当的程序:

    #include

    class AClass

    {

    int anInteger;

    public:

    AClass(int integer)

    : anInteger(integer)

    { }

    int GetInteger() const

    {

    return anInteger;

    }

    void SetInteger(int toSet)

    {

    anInteger = toSet;

    }

    };

    struct StaticFunctions

    {

    // C# doesn't have free functions, so I'll do similar in C++

    // Note that in real code you'd use a free function for this.

    static void FunctionTakingAReference(AClass *item)

    {

    item->SetInteger(4);

    }

    static void FunctionTakingAReferenceToAReference(AClass **item)

    {

    *item = new AClass(1729);

    }

    };

    int main()

    {

    AClass* instanceOne = new AClass(6);

    StaticFunctions::FunctionTakingAReference(instanceOne);

    std::cout << instanceOne->GetInteger() << "\n";

    AClass* instanceTwo;

    StaticFunctions::FunctionTakingAReferenceToAReference(&instanceTwo);

    // Note that operator& behaves similar to the C# keyword "ref" at the call site.

    std::cout << instanceTwo->GetInteger() << "\n";

    // (Of course in real C++ you're using std::shared_ptr and std::unique_ptr instead,

    // right? :) )

    delete instanceOne;

    delete instanceTwo;

    }

    而对于C#:

    using System;

    internal class AClass

    {

    public AClass(int integer)

    : Integer(integer)

    { }

    int Integer { get; set; }

    }

    internal static class StaticFunctions

    {

    public static void FunctionTakingAReference(AClass item)

    {

    item.Integer = 4;

    }

    public static void FunctionTakingAReferenceToAReference(ref AClass item)

    {

    item = new AClass(1729);

    }

    }

    public static class Program

    {

    public static void main()

    {

    AClass instanceOne = new AClass(6);

    StaticFunctions.FunctionTakingAReference(instanceOne);

    Console.WriteLine(instanceOne.Integer);

    AClass instanceTwo = new AClass(1234); // C# forces me to assign this before

    // it can be passed. Use "out" instead of

    // "ref" and that requirement goes away.

    StaticFunctions.FunctionTakingAReferenceToAReference(ref instanceTwo);

    Console.WriteLine(instanceTwo.Integer);

    }

    }

    展开全文
  • c# ref 的使用。

    2017-12-13 11:32:33
    1.ref 的使用。 void Function(ref p) 使用ref 传参,是传递的地址。 public class RefTest : MonoBehaviour { string p; // Use this for initialization void Start () { p = "J"; Change(ref p); //这里输出“g”...
  • c#代码: using System.Collections; using System.Collections.Generic; using UnityEngine; using XLua; #region ref和out public class RefOut { public int RefFun(int a,ref int b,ref int c,int d) { b = ...
  • 正确理解C#中的ref关键字,有助于编程人员对ref的理解
  • ref  通常我们向方法中传递的是值。方法获得的是这些值的一个拷贝,然后使用这些拷贝,当方法运行完毕后,这些拷贝将被丢弃,而原来的值不将受到影响。此外我们还有其他向方法传递参数的形式,引用(ref)和输出...
  • C#Ref与Out的区别

    千次阅读 多人点赞 2016-04-20 15:44:34
    ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递。对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别。 总结起来,他们有如下语法区别: 1、ref传进去的参数...
  • C#——ref

    千次阅读 2021-01-05 10:57:12
    C#——ref关键字 ref 关键字指示按引用传递的值。 它用在四种不同的上下文中: 1.在方法签名和方法调用中,按引用将参数传递给方法。 2.在方法签名中,按引用将值返回给调用方。 3.在成员正文中,指示引用返回值是否...
  • 主要介绍了C#ref和out的区别浅析,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢,需要的朋友可以参考下
  • C# 引用参数ref

    2022-01-22 13:37:06
    C# 引用参数ref
  • C#ref 参数的使用

    2020-08-03 22:33:08
    } /// /// 交换两个变量的值 /// /// 值1 /// 值2 private static void ExchangeTheValuesOfTheTwoVariables(ref int num1, ref int num2) { int temp = num1; num1 = num2; num2 = temp; } } }
  • C# ref out is as 简单理解及使用实例

    千次阅读 2020-01-25 16:38:17
    C#语言中进行类型转换的操作符is和as。is和as都是强制类型转换,但这两者有什么相同之处和不同之处呢?
  • 使用引用(ref)来提高程序的性能 在C#语言高版本之后,开始着重性能的提升,引入很多特性可以使用程序的性能提高,比如引用的大量使用,使用栈来分配内存(stackalloc),由于使用栈内存来代替堆内存,从而不...
  • C# ref和out的区别

    2011-09-15 10:42:52
    C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像...
  • C#--ref的使用与局限

    2022-02-21 14:33:47
    对于ref的作用我做了一个实验对其进行验证学习,一个是使用ref,一个是void函数不使用ref,还有一个是不使用ref但是设定变量接收 先说不使用ref的,设定变量接收看是否可以 public int Testx(int x ,int y) { ...
  • 主要给大家介绍了关于C#中out参数、ref参数与值参数的用法及区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • c#方法参数:ref

    千次阅读 2021-04-01 17:20:05
    参考:方法参数(C# 参考)
  • C#ref 参数

    2020-05-27 13:44:53
    这就要引入关键字 ref 什么是 ref ref (全拼:reference):强制要求参数按引用传值。 使用 ref 关键字 有两个注意事项,如下 一:传入参数之前,必须给参数赋值。 二:调用方法时,必须加 ref 关键字。 验证注意...
  • C#函数的高级参数-- ref引用型形参
  • C#中关键字ref和out

    千次阅读 2021-03-24 11:25:30
    ref ref:MSDN的定义为:“The ref keyword indicates a value that is passed by reference.”就是通过引用来传递参数。ref也是Reference的缩写。 不使用ref using System; namespace Test_Code { class A { ...
  • C#ref和out的原理

    千次阅读 2018-10-10 14:07:04
    用了那么久的 ref 和 out ,你真的了解它们是如何使得实参与形参的值保持同步的吗? 二、研究前提 要研究这个问题,前提是要了解 C# 中方法间参数是如何传递的: 1.CLR支持两种类型:值类型和引用类型。  a. 值...
  • 主要介绍了C#编程中使用ref和out关键字来传递数组对象的用法,在C#中数组也是对象可以被传递,需要的朋友可以参考下
  • C# ref参数问题

    2013-07-31 11:04:59
    引用自百度知道 第一个: static void Main(string[] args) { int x = 0; GetVal(x); Console.WriteLine(x); //x=0,很遗憾,传递的是值类型,x的值没有变化 GetRefVal(ref
  • c# ref out 区别 比较 汇总

    千次阅读 2016-07-06 00:05:12
    refC# 参考) Visual Studio 2015 其他版本   ref 关键字会导致参数通过引用传递,而不是通过值传递。 通过引用传递的效果是,对所调用方法中的参数进行的任何更改都反映在调用方法中。...
  • C#ref 使用

    千次阅读 2016-01-12 15:46:00
    C#中指针的使用 using UnityEngine; using System.Collections; public class TestRef : MonoBehaviour { private FindCatGame testObject; // Use this for initialization void Start () { } // Update...
  • 浅谈 C# ref 和 out 的使用方法

    千次阅读 2017-06-05 14:47:39
    有过C#基础知识的都应该清楚Ref和Out的使用方法,因此本人的这随笔主要是针对刚入门的新手而言的,大师请绕道而行; 开始主题: C#有两种参数传递方式:传值和引用,传值就是变量的值,而引用则是传递的变量的地址...
  • C#高级参数之ref

    千次阅读 2020-03-08 17:14:05
    今天来写一个交换值的方法函数 //未使用ref参数 static void Main(string[] args) { int a = 10, b = 5; Console.WriteLine("调用方法前:a={0},b={1}", a, b); TextRef(a, b); ...
  • C#中的ref参数的使用

    2020-08-20 14:53:34
    先通过通过一个小例子来说明ref的作用 static void Main(string[] args) { double ss = 100; Add(ss); Console.WriteLine(ss); } public static void Add(double s) { s += 5; } 这可以很明显知道,ss传...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,853
精华内容 27,141
关键字:

c# ref

c# 订阅
友情链接: 12.zip