DotNet · 2022年4月23日

C#中ref and out的说明

ef必须先初始化,因为是引用,所以必须先“有”,才能引用,如果不先初始化,调用的时候就取不到值会报错,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用,但是在方法内部一定要记得为其赋值,不然返回个空的东西,有什么用?根本就没有意义了。

ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。 

static void Main(string[] args) 
{ 
int i1 = 1; 
DotIt(i1); 
Console.WriteLine(i1); 
int i1 = 10; 
int i2 = 20; 


//Swap(i1, i2); 
Console.WriteLine("i1={0},i2={1}", i1, i2);  //返回的结果依旧是10,20,因为Swap(i1, i2)方法处理的是变量i1,i2的拷贝或者说是副本,变量i1,i2原先的值并没有因此而改变。

//用ref之前必须给变量赋值 
Swap(ref i1, ref i2);//传递引用。给ref传递参数的时候也要加上ref 
Console.WriteLine("i1={0},i2={1}", i1, i2); 

bool b= false;//不需要为out赋值 
int i = Parse(Console.ReadLine(), out b); 
if (b) 
{ 
Console.WriteLine("成功,i={0}", i); 
} 
else 
{ 
Console.WriteLine("错误"); 
} 
Console.ReadKey(); 
} 

//int i传进来的的时候是复制了一份传进来,折腾的是复制品 
static void DotIt(int i) 
{ 
Console.WriteLine(i); 
i++; 
Console.WriteLine(i); 
} 

static void Swap(ref int i1, ref int i2)//reference→ref 
{ 
//标记为ref就是要求调用者传递变量的引用 
int temp = i1; 
i1 = i2; 
i2 = temp; 
} 

static void Swap(int i1, int i2) 
{ 
int temp = i1; 
i1 = i2; 
i2 = temp; 
} 

static int Parse(string s,out bool success) 
{ 
//Console.WriteLine(success); //这样会报错,因为success没有为其赋值
if(s=="一") 
{ 
success = true; 
return 1; 
} 
else if(s=="二") 
{ 
success = true; 
return 2; 
} 
else 
{ 
success = false; 
return -1; 
} 
} 

 

最新电影,电视剧,尽在午夜剧场

电影电视剧午夜不寂寞