2015-10-18 226 views
-2

有人可以請解釋一下,值類型和引用類型只是c#.net的概念,或者它適用於其他各種語言,如c,C++,java。 感謝值類型和參考類型只是c#概念?

+0

這是一種通用的概念,它不會忽略處理器的工作方式。你並不總是不得不說出這些話,因爲語言設計師爲你做出了選擇。在Java中,除了基元以外,所有東西都是引用類型,這是使用垃圾回收器的語言的自然選擇。在C和C++中,所有東西都是值類型,具有顯式語法來管理引用和複製值。在C#中,您可以選擇。你選擇的是非常重要的,你不能忽略聲明或代碼中的差異。 –

回答

2

在Java中,從Does Java make distinction between value type and reference type報價:

在Java中,所有的對象和枚舉是引用類型,而所有原始數據是值類型。兩者之間的區別與C#中的複製語義相同,但您無法在Java中定義新的值類型。

在C和C++中,沒有值類型和引用類型的概念。 C++有引用但這與引用類型不同。

1

它適用於許多編程語言。

通常,值類型可以將存儲在堆棧中(see this Eric Lippert's article for C# details)和堆中的引用類型。或者,至少,值類型是在分配給新變量或作爲參數傳遞給方法時創建自身副本的值類型。

例如:

// In C# a struct is a value type 
public struct A 
{ 
    public string Text; 

    public A(string text) 
    { 
     Text = text; 
    } 
} 

A a = new A("hello world"); 

// This creates a copy, instead of assigning the same "object" to a new reference 
A a1 = a; 

看看Wikipedia說:

一些編程語言,尤其是C#,d,和斯威夫特 - 使用術語 值類型來引用類型的對象其中賦值具有 深層複製語義(與參考類型相反,其具有淺層

而且還說:

其他編程語言,例如,Java,不正式定義的術語 值類型,但他們的從業者非正式地用這個詞來指代 與深拷貝語義類型(如Java的基本類型)。 複製語義

另一個有趣的Q & A可以stack and heap in V8 (JavaScript)