ref(C# 参考)
ref 关键字使参数按援用通报。其结果是,当控制权通报回挪用要领时,在要领中对参数所做的任何变动都将反映在该变量中。若要运用 ref 参数,则要领定义和挪用要领都必需显式运用 ref 关键字。比方:
复制代码
class RefExample { static void Method(ref int i) { i = 44; } static void Main() { int val = 0; Method(ref val); // val is now 44 } }
通报到 ref 参数的参数必需最早初始化。这与 out 差别,out 的参数在通报之前不需要显式初始化。(请拜见 out。)
只管 ref 和 out 在运行时的处理方式差别,但它们在编译时的处理方式是雷同的。因而,假如一个要领采纳 ref 参数,而另一个要领采纳 out 参数,则没法重载这两个要领。比方,从编译的角度来看,以下代码中的两个要领是完全雷同的,因而将不会编译以下代码:
复制代码
class CS0663_Example { // compiler error CS0663: "cannot define overloaded // methods that differ only on ref and out" public void SampleMethod(ref int i) { } public void SampleMethod(out int i) { } }
然则,假如一个要领采纳 ref 或 out 参数,而另一个要领不采纳这两类参数,则能够举行重载,以下所示:
复制代码
class RefOutOverloadExample { public void SampleMethod(int i) { } public void SampleMethod(ref int i) { } }
备注
属性不是变量,因而不能作为 ref 参数通报。
有关通报数组的信息,请拜见
运用 ref 和 out 通报数组。
示例
按援用通报值范例(如上所示)是有效的,然则 ref 关于通报援用范例也是很有效的。这许可被挪用的要领修正该援用所援用的对象,由于援用自身是按援用来通报的。下面的示例显示出当援用范例作为 ref 参数通报时,能够变动对象自身。
class RefRefExample { static void Method(ref string s) { s = "changed"; } static void Main() { string str = "original"; Method(ref str); // str is now "changed" } }
以上就是c#ref关键字的示例代码分享的细致内容,更多请关注ki4网别的相干文章!