本帖最后由 张伟86 于 2013-5-2 22:16 编辑
因为在你的test函数中,使用的是值复制。即你在test函数中新定义了一个int val,并将main函数中的val值传递给test中这个新建的val,在此之后test中的val就于main函数中的val没有了半毛钱关系;所以在test函数调用完成时,test中的val销毁了,而main函数中的val并没有预料般改变。
你的本意应该要在调用test函数后改变val的值,这时候可以改变函数返回值,return返回需要的数值;或者使用引用类型。引用类型可以使用ref和out关键字,ref在调用前需要初始化,而out不需要。具体代码如下:- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace ConsoleApplication3
- {
- class Person
- {
- public
- int Age;
- }
- class Program
- {
- static void Main(string[] args)
- {
- int refval = 2;
- refTest(ref refval);
- int outval = 2;
- outTest(out outval);
- Console.WriteLine(refval);
- Console.WriteLine(outval);
- Console.ReadKey();
- }
- static void refTest(ref int val)
- {
- int temp = 10;
- val = temp * 20;
- }
- static void outTest(out int val)
- {
- int temp = 10;
- val = temp * 20;
- }
- }
- }
复制代码 |