楼上的回答很详细,简单来说
ref 必须由调用方对参数进行初始化赋值,即ref可以把参数及其值传入被调用方法
out 必须在被调用方内部初始化赋值,即out不接受外部传入的值,像它的名字一样,只出不进
当一个参数有明确的值,需要在被调用方法中进行改变时,用ref
当一个参数没有明确的值,需要通过被调用方法得到值时,用out
写了一个例子:- static void Main(string[] args)
- {
- Console.WriteLine("请输入一个数字:");
- int s = Convert.ToInt32(Console.ReadLine());//字符检测代码省略
- int jia;
- bool oushu = Jisuan(ref s,out jia);
- if (oushu)
- {
- Console.WriteLine("输入的{0}是偶数,加{1},新值为{2}",s-jia,jia,s);
- }
- else
- {
- Console.WriteLine("输入的{0}不是偶数,减{1},新值为{2}",s+jia,jia,s);
- }
- Console.ReadKey();
- }
- /// <summary>
- /// 被调用方法
- /// </summary>
- /// <param name="a">在Main()由用户输入的数字,其值明确,需在被调用方法中改变得到新值</param>
- /// <param name="b">b参数值不明确,需要在被调用方法中得到新值,</param>
- /// <returns>方法的返回值</returns>
- static bool Jisuan(ref int a, out int b)
- {
- Random r = new Random();
- b = r.Next(1, 100); //out b 必须在Jisuan()内初始化赋值,外部如果有赋值(int jia=100),则外部赋值无效。
- // 如果缺少此句,程序会报错,无法运行。
- if (a % 2 == 0) //ref a 必须在调用方(外部方法)初始化赋值,在Jisuan()内可直接使用
- {
- a += b;
- return true;
- }
- else
- {
- a -= b;
- return false;
- }
- }
复制代码 。
|