当前位置: 首页 > 编程语言 > C#

在C#中按值传递引用类型分享

时间:2023-04-10 16:30:07 C#

C#学习教程:在C#中按值传递引用类型有没有办法做到这一点。在C++中,如果我想按值传递它,我总是可以依靠复制构造函数来完成这个技巧。在C#中有什么方法除了:1.显式创建一个新对象2.实现IClonable然后调用Clone方法。这是一个小例子:让我们用C++中的类A实现一个复制构造函数。一个方法func1(Classa),我可以通过说func1(objA)来调用它(自动创建一个副本)C#中是否有类似的东西。顺便说一句,我使用的是VisualStudio2005。不,C#中没有等效的复制构造函数。你传递的(按价值)是一个参考。ICloneable也有风险,因为它的定义不明确,无论是深的还是浅的(而且它没有得到很好的支持)。另一种选择是使用序列化,但同样,它可以快速提取比您预期更多的数据。如果您担心不想更改方法,则可以考虑使类不可变。那么没有人可以做任何令人讨厌的事情。正如已经解释过的,没有与C++的复制构造函数等效的东西。另一种技术是对对象使用不可变设计。对于不可变对象,按引用传递和复制之间没有(语义)区别。这就是System.String的设计方式。其他系统(尤其是函数式语言)更多地应用了这种技术。此链接应回答您的问题-http://msdn.microsoft.com/en-us/library/s6938f28(VS.80).aspx根据此链接(已发布):http://msdn.microsoft.com/en-us/library/s6938f28(VS.80).aspx传值引用类型如下所示。引用类型arr按值传递给Change方法。除非为数组分配了新的内存位置,否则任何更改都将影响原始项,在这种情况下,更改完全是方法本地的。类PassingRefByVal{staticvoidChange(int[]pArray){pArray[0]=888;//此更改会影响原始元素。pArray=newint[5]{-3,-1,-2,-3,-4};//此更改是本地的。系统。安慰。WriteLine("在方法内部,第一个元素是:{0}",pArray[0]);}staticvoidMain(){int[]arr={1,4,5};System.Console.WriteLine("InsideMain,在调用方法之前,第一个元素是:{0}",arr[0]);改变(arr);System.Console.WriteLine("在Main内部,调用该方法后,第一个元素为:{0}",arr[0]);最后,更深入的讨论,看JonSkeet这个问题的帖子:InC#viaPassingobjectsbyreferenceorvalue看看这个上面是C#学习教程:PassingreferencetypesbyvalueinC#All分享的内容,如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicclassProduct{publicstringName;公共字符串颜色;公共字符串类别;公共产品(产品o){this.Name=o.Name;this.Color=o.Color;this.Category=o.Category;}//注意我们需要在覆盖它时提供一个默认构造函数publicProduct(){}}publicProduct生产(产品样本){Productp=newProduct(sample);p.Category="成品";返回p;产品样本=新产品();样品名称=“玩具”;样品颜色=“红色”;sample.Category="样品产品";产品p=Produce(sample);Console.WriteLine(String.Format("Product:Name={0},Color={1},Category={2}",p.Name,p.Color,p.Category));Console.WriteLine(String.Format("样本:名称={0},颜色={1},类别={2}",样本名称,样本颜色,样本类别));本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: