程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c#內存管理.(4)

c#內存管理.(4)

編輯:關於C語言
種方法就更有效的進行操作內存,其實我們並不需要拷貝這塊內存。

當我們傳遞的是值類型的引用,那麼程序修改這個引用的內容都會直接反映到這個值上。

傳遞引用類型

傳遞引用類型參數有點類似於前面的傳遞值類型的引用。

public class MyInt {
  public int MyValue;
}
public void Go() {
   MyInt x = new MyInt();
   x.MyValue = 2;
   DOSomething(x);
   Console.WriteLine(x.MyValue.ToString());
}
public void DOSomething(MyInt pValue) {
  pValue.MyValue = 12345;
}

這段代碼做了如下工作:

1.開始調用go()方法讓x變量進棧。

2.調用DOSomething()方法讓參數pValue進棧

3.然後x值拷貝到pValue

這裡有一個有趣的問題是,如果傳遞一個引用類型的引用又會發生什麼呢?

如果我們有兩類:

public class Thing {
}
public class Animal : Thing {
  public int Weight;
}
public class Vegetable : Thing {
  public int Length;
}

我們要執行go()的方法,如下:

public void Go () {
  Thing x = new Animal();
  Switcharoo(ref x);
  Console.WriteLine(
   "x is Animal  :  "
   + (x is Animal).ToString());
  Console.WriteLine(
    "x is Vegetable :  "
    + (x is Vegetable).ToString());
}
public void Switcharoo (ref Thing pValue) {
  pValue = new Vegetable();
}

X的輸出結果:

x is Animal  :  Falsex is Vegetable :  True

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved