2017-02-23 49 views
1

我只需要對引用變量有基本的瞭解,因爲我處於基本類中。我的教授希望我們聲明一個參考變量來存儲對象的地址,我不知道該怎麼做,甚至不知道該做什麼。C#如何聲明一個引用變量來存儲對象的地址

他的確教會我們如何做這樣的事情。

public double Method(ref name) 

但我不明白這應該如何存儲對象的'地址'。

任何解釋是非常感謝。

+0

[REF(C#參考)(https://msdn.microsoft.com/en-us/library/14akc2c7(V = VS.90)的.aspx ) –

+1

該地址是不安全的代碼。 –

+1

您可以通過將其轉換爲「對象」來獲取對某個值的引用。在C#中有值類型和引用類型,並且_never_是您應該擔心對象地址的一個原因。 – ja72

回答

0

請看下面的例子:

public static double SeName0(MyType new_name) 
{ 
    new_name = new MyType(); // only new_name reference to a new object 
} 

public static double SeName1(ref MyType new_name) 
{ 
    new_name = new MyType(); // both name and ref new_name reference to a new object 
} 

public static void Main() 
{ 
    MyType name; 
    SeName0(name); // Do not touch name variable in this local scope 
    SeName1(name); // Change name reference to new object 
} 

讓我們想象一下一個棧的程序:

enter image description here

薄箭頭表示裁判的名字需要在原有的和地址同一時間是對同一個對象的引用。 如果你只對對象調用函數什麼都不會發生。 但是,如果你改變裁判的名字引用到另一個對象,則原始參考名稱或者變化。

0

的問題是有點含糊,雖然,他可以簡單地檢查是否理解引用類型和值類型在C#這是遠遠在我看來比了解ref關鍵字對方法參數的使用更爲重要。

隨着它是沒有壞處提,值類型被存儲在被存儲在管理堆存儲器堆棧和引用類型。他們的地址作爲值類型存儲在堆棧中,稱爲參考。

下面你實例化對象,也就是引用類型和在堆上創建。 obj1包含指向託管堆的指針的值。

Object obj1 = new Object();

以下聲明另一個名爲obj2的引用類型變量。這次你不要實例化,你只需將obj1引用的值賦給obj2。

Object obj2 = obj1;

這可能是你的教授問你的。即使這並非如此尚好知道:)