-- 以下信息均来自网上, 后边会稍加自己的总结 --
c# 的类型分为两种: 值类型和引用类型:
值类型: 简单类型 (包括 int, long, double 等) 和结构 (structs) 都是值类型
引用类型: 除了值类型以外的都是引用类型.
REF
ref 关键字使参数按引用传递. 其效果是, 当控制权传递回调用方法时, 在方法中对参数的任何更改都将反映在该变量中. 若要使用 ref 参数, 则方法定义和调用方法都必须显式使用 ref 关键字. 例如:
1 classRefExample2 {3 staticvoidMethod(refinti)4 {5 i=44;6 }7 staticvoidMain()8 {9 intval=0;10 Method(refval);11 //val is now 4412 }13 }
传递到 ref 参数的参数必须最先初始化. 这与 out 不同, 后者的参数在传递之前不需要显式初始化. 有关更多信息, 请参见 aspx"target="_blank">out.
尽管 ref 和 out 在运行时的处理方式不同, 但在编译时的处理方式相同. 因此, 如果一个方法采用 ref 参数, 而另一个方法采用 out 参数, 则无法重载这两个方法. 例如, 从编译的角度来看, 以下代码中的两个方法是完全相同的, 因此将不会编译以下代码:
1 classCS0663_Example2 {3 //Compiler error CS0663: "Cannot define overloaded4 //methods that differ only on ref and out".5 publicvoidSampleMethod(outinti) { }6 publicvoidSampleMethod(refinti) { }7 }
但是, 如果一个方法采用 ref 或 out 参数, 而另一个方法不采用这两个参数, 则可以进行重载, 如下例所示:
1 classRefOverloadExample2 {3&
来源: https://www.2cto.com/kf/201007/52776.html