2015-10-18 228 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)