C#方法中的ref和out

  C#方法中的ref和out

  ref

  通常我們向方法中傳遞的是值。方法獲得的是這些值的一個拷貝,然後使用這些拷貝,當方法運行完畢後,這些拷貝將被丟棄,而原來的值不將受到影響。此外我們還有其他向方法傳遞參數的形式,引用(ref)和輸出(out)。

  有時,我們需要改變原來變量中的值,這時,我們可以向方法傳遞變量的引用,而不是變量的值。引用是一個變量,他可以訪問原來變量的值,修改引用將修改原來變量的值。變量的值存儲在內存中,可以創建一個引用,他指向變量在內存中的位置。當引用被修改時,修改的是內存中的值,因此變量的值可以將被修改。當我們調用一個含有引用參數的方法時,方法中的參數將指向被傳遞給方法的相應變量,因此,我們會明白,爲什麼當修改參數變量的修改也將導致原來變量的值。

  創建參數按引用傳遞的方法,需使用關鍵字ref.例;

  using System;

  class gump

  {

  public double square(ref double x)

  {

  x=x*x;

  return x;

  }

  }

  class TestApp

  {

  public static void Main()

  {

  gump doit=new gump();

  double a=3;

  double b=0;

  Console.WriteLine("Before square->a={0},b={1}",a,b);

  b=doit.square(ref a);

  Console.WriteLine("After square->a={0},b={1}",a,b);

  }

  }

  通過測試,我們發現,a的值已經被修改爲9了。

  out

  通過指定返回類型,可以從方法返回一個值,有時候(也許還沒遇到,但是我們應該有這麼個方法),需要返回多個值,雖然我們可以使用ref來完成,但是C#專門提供了一個屬性類型,關鍵字爲out.介紹完後,我們將說明ref和out的區別。

  using System;

  class gump

  {

  public void math_routines(double x,out double half,out double squared,out double cubed)

  //可以是:public void math_routines(//ref double x,out double half,out double squared,out double cubed)

  //但是,不可以這樣:public void math_routines(out double x,out double half,out double squared,out double cubed),對本例來說,因爲輸出的值要靠x賦值,所以x不能再爲輸出值

  {

  half=x/2;

  squared=x*x;

  cubed=x*x*x;

  }

  }

  class TestApp

  {

  public static void Main()

  {

  gump doit=new gump();

  double x1=600;

  double half1=0;

  double squared1=0;

  double cubed1=0;

  /*

  double x1=600;

  double half1;

  double squared1;

  double cubed1;

  */

發佈了75 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章