C#中ref和out如何使用

这篇文章将为大家详细讲解有关C#中ref和out如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

成都创新互联公司2013年至今,先为永顺等服务建站,永顺等地企业,进行企业商务咨询服务。为永顺企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

在C#中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员(方法、属性、索引器、运算符和构造函数)更改参数的值,并保持该更改。若要通过引用传递参数,请C#使用ref和out传递数组。为简单起见,本主题的示例中只使用了ref关键字。有关ref和out传递数组之间的差异的信息,请参见、C#使用ref和out传递数组。

值类型变量直接包含其数据,这与引用类型变量不同,后者包含对其数据的引用。因此,向方法传递值类型变量意味着向方法传递变量的一个副本。方法内发生的对参数的更改对该变量中存储的原始数据无任何影响。如果希望所调用的方法更改参数值,必须使用ref或out关键字通过引用传递该参数。为了简单起见,以下示例使用ref。

下面的示例演示通过值传递值类型参数。通过值将变量myInt传递给方法SquareIt。方法内发生的任何更改对变量的原始值无任何影响。

//PassingParams1.cs  usingSystem;  classPassingValByVal  ...{  staticvoidSquareIt(intx)  //Theparameterxispassedbyvalue.  //ChangestoxwillnotaffecttheoriginalvalueofmyInt.  ...{  x*=x;  Console.WriteLine("Thevalueinsidethemethod:{0}",x);  }  publicstaticvoidMain()  ...{  intmyInt=5;  Console.WriteLine("Thevaluebeforecallingthemethod:{0}",  myInt);  SquareIt(myInt);//PassingmyIntbyvalue.  Console.WriteLine("Thevalueaftercallingthemethod:{0}",  myInt);  }  }

当调用SquareIt时,myInt的内容被复制到参数x中,在方法内将该参数求平方。但在Main中,myInt的值在调用SquareIt方法之前和之后是相同的。实际上,方法内发生的更改只影响局部变量x。

下面的示例除使用ref关键字传递参数以外,其余与上面代码相同。参数的值在调用方法后发生更改。

//PassingParams2.cs  usingSystem;  classPassingValByRef  ...{  staticvoidSquareIt(refintx)  //Theparameterxispassedbyreference.  //ChangestoxwillaffecttheoriginalvalueofmyInt.  ...{  x*=x;  Console.WriteLine("Thevalueinsidethemethod:{0}",x);  }  publicstaticvoidMain()  ...{  intmyInt=5;  Console.WriteLine("Thevaluebeforecallingthemethod:{0}",  myInt);  SquareIt(refmyInt);//PassingmyIntbyreference.  Console.WriteLine("Thevalueaftercallingthemethod:{0}",  myInt);  }  }

关于C#中ref和out如何使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


文章名称:C#中ref和out如何使用
文章分享:http://azwzsj.com/article/ggsosp.html