-
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:111.首先需了解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参数函数实现过程中发现必须首先对传入的参数进行赋值,否者报错
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:13ref和out相同点 它们都是传址的,执行方法后,原来的值都改变了 二. ref和out不同点 使用ref时,传入的参数必须初始化;而使用out时不用初始化。 ref能把参数的值传进方法;而out要把参数清空(即使参数已经...一. ref和out相同点
它们都是传址的,执行方法后,原来的值都改变了
二. ref和out不同点
- 使用ref时,传入的参数必须初始化;而使用out时不用初始化。
- 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/C++中的指针还是C中的引用?
2021-05-25 04:05:22当你在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:331.ref 的使用。 void Function(ref p) 使用ref 传参,是传递的地址。 public class RefTest : MonoBehaviour { string p; // Use this for initialization void Start () { p = "J"; Change(ref p); //这里输出“g”... -
lua调用c#之Lua使用C# ref和out函数
2020-10-08 20:04:49c#代码: 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关键字
2015-11-09 21:27:18正确理解C#中的ref关键字,有助于编程人员对ref的理解 -
C#中ref和out参数使用时需要注意的问题
2020-12-22 21:20:43ref 通常我们向方法中传递的是值。方法获得的是这些值的一个拷贝,然后使用这些拷贝,当方法运行完毕后,这些拷贝将被丢弃,而原来的值不将受到影响。此外我们还有其他向方法传递参数的形式,引用(ref)和输出... -
C#Ref与Out的区别
2016-04-20 15:44:34ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递。对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别。 总结起来,他们有如下语法区别: 1、ref传进去的参数... -
C#——ref
2021-01-05 10:57:12C#——ref关键字 ref 关键字指示按引用传递的值。 它用在四种不同的上下文中: 1.在方法签名和方法调用中,按引用将参数传递给方法。 2.在方法签名中,按引用将值返回给调用方。 3.在成员正文中,指示引用返回值是否... -
C#中ref和out的区别浅析
2020-09-04 00:05:20主要介绍了C#中ref和out的区别浅析,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢,需要的朋友可以参考下 -
C# 引用参数ref
2022-01-22 13:37:06C# 引用参数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都是强制类型转换,但这两者有什么相同之处和不同之处呢? -
(36)C#使用引用(ref)来提高程序的性能
2021-11-24 14:47:24使用引用(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参数与值参数的用法及区别
2020-08-27 00:00:34主要给大家介绍了关于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引用型形参
2022-03-13 10:57:47C#函数的高级参数-- ref引用型形参 -
C#中关键字ref和out
2021-03-24 11:25:30ref 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关键字来传递数组对象的用法
2020-09-02 21:00:43主要介绍了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:12ref(C# 参考) Visual Studio 2015 其他版本 ref 关键字会导致参数通过引用传递,而不是通过值传递。 通过引用传递的效果是,对所调用方法中的参数进行的任何更改都反映在调用方法中。... -
C#ref 使用
2016-01-12 15:46:00C#中指针的使用 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传...