熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

正確理解C#中的ref關鍵字(續)[2]

2013-11-13 11:01:44  來源: .NET編程 

那麼我們再來看看上次那些 C# 的代碼

 

  //

  // MyClass definition

  public class MyClass

  {

   public int Value;

  }

  //

  // Tester methods

  public static void TestRef(ref MyClass m)

  {

  // 這裡的 m 也就相當於大家所說的指向指針的指針

  // m 指向 Main 中的 m m 則指向那個實際的 MyClass 的實例

  // 相當於 C++ 中的

   // MyClass** m = &m;

   // (*m)>Value = ;

   //

  mValue = ;

  }

  public static void TestNoRef(MyClass m)

  {

  // 這裡是一個普通的傳遞引用類型的例子相當於

  // MyClass m = m;

  // mValue = ;

  //

   // m 復制了 m 中的內容也就是說現在 m 也和 m 一樣指向了 m 指向的實例

  // 所以這裡對 m 的修改也會影響到 Main 中的 m

  //

  mValue = ;

  }

  public static void TestCreateRef(ref MyClass m)

  {

  // 這裡的 m 也是一個指向引用的引用

  // m 指向 Main 中的 m m 則指向那個實際的 MyClass 的實例

  // 相當於 C++ 中的

  // MyClass** m = &m;

  // *m = new MyClass();

  // (*m)>Value = ;

  // 在上面的 *m = new MyClass() 這個調用的時候實際上只是將 Main m 的值(引用)給修改了

  // 也就是說現在 m 指向 Main 中的 m m 現在則指向了這個新生成的實例

  // 所以這裡 mValue = 是會影響到 Main 中的結果的

   //

   m = new MyClass();

   mValue = ;

  }

  public static void TestCreateNoRef(MyClass m)

  {

   // 在這個方法裡面我們新申明了一個 MyClass 的實例而讓 m 指向了這個實例

  // 這時候實際上將 m 的值修改了 m Main 中的 m 各自指向不同的實例

  // 所以對 m 做的任何修改都不會影響到 m

  //

   m = new MyClass();

  mValue = ;

  }

  public static void Main()

  {

   MyClass m = new MyClass();

   mValue = ;

   TestRef(ref m);

  ConsoleWriteLine(mValue);

   TestNoRef(m);

  ConsoleWriteLine(mValue);

   TestCreateRef(ref m);

   ConsoleWriteLine(mValue);

  TestCreateNoRef(m);

  ConsoleWriteLine(mValue);

  }

 

[]  []  


From:http://tw.wingwit.com/Article/program/net/201311/15017.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.