问题描述
staticvoidexchang(refintnumber1,refintnumber2){inttemp=number2;number2=number1;number1=temp;}这段代码的ref不知道有什么作用,求大神解答..
解决方案
解决方案二:
ref引用传值,即方法中可直接修改参数的值
解决方案三:
ref就类似于c语言里面的指针
解决方案四:
ref只的是按引用方式传递参数具体参考中文的:
解决方案五:
ref修饰的参数,你在函数内修改它,会作用到调用者的实际参数上。
解决方案六:
ref是从传统的c语言借用过来的概念,这是c#从一开始就有的(vb.net也从一开始就有)。不过.net跟c语言处理机制并不一样,因此这个词儿其实是有歧义的。在.net中,按引用传递参数是指,当exchang方法执行完毕时,.net把栈中的两个参数弹出时会重新赋值给number1和number2。而如果是按值传递参数,是指从栈中弹出的参数就丢弃了、不再赋值了。这里实际上根本没有c的那种传递地址(或者说引用)的实质,只不过是c#从一开始就借用那个类似的词儿而已。如果不理解内部机制,就会产生歧义。例如在c中为了对自定义对象参数化进行性能优化,采用了传送地址的方式;而在.net中,实际上传值反而是比传引用快,传引用反而是慢的。因此不能把.net用c语言的概念随便硬套,否则就会误解.net机制。
解决方案七:
换句话说,假设在参数中传送引用类型对象时(而不是像你的例子这样传int值类型对象),那么.net天生就是传引用的。因此.net所说的“传值方式”其实就是传送引用,就是“把对象的引用的值”传送;而.net所说的“传引用方式”,则可以看作对对象的引用再传引用。这就是.net跟c系列的参数传送方式完全不同的地方。
解决方案八:
实际上,如果今天的知识可以带回到2001年以前,我相信.net设计值(c#设计值)可能会把这个关键字重新设计为“有副作用的”或者“可返回的”之类的关键字,改一两个字母就会让它更加明白和准确。而决不需要用c语言指针来解释它。
解决方案九:
staticvoidMain(string[]args){intmy_number1=100;intmy_number2=200;exchange(refmy_number1,refmy_number2);//函數執行過結果,兩個變量的變化,可帶到主函數Console.WriteLine(“my_number1:”+my_number1.ToString());//輸出200Console.WriteLine(“my_number2:”+my_number2.ToString());//輸出100Console.ReadKey();}staticvoidexchange(refintnumber1,refintnumber2){inttemp=number2;number2=number1;number1=temp;}