以下数据类型分配是否类似?

时间:2010-05-19 04:24:33

标签: c# objective-c vb.net types

我对语言及其基础非常感兴趣,我想向社区提出这个问题。以下是这些语言中的以下类似物吗?

C#

Foo bar = default(Foo); //alloc
bar = new Foo(); //init

VB.NET

Dim bar As Foo = Nothing  'alloc
bar = New Foo()   'init

目标-C

Foo* bar = [Foo alloc];   //alloc
bar = [bar init];    //init

2 个答案:

答案 0 :(得分:2)

Foo类型可以是值类型或参考类型,当然,除了Objective-C之外。

假设Foo是一个引用类型,那么对于C#和VB.NET,第一行不会为对象分配任何内存,因为Objective-C第一行实际上会分配内存,所以这是一个区别。 .NET语言在第二行中的一行中执行分配和初始化。

在Foo是值类型的情况下,.NET语言彼此不一致,Objective-C没有值类型(至少不是我15年前最后一次使用它)。

答案 1 :(得分:0)

你在C#和VB.NET中都覆盖了bar。您的代码仅相当于:

Foo bar;  // does nothing but declare a handle
bar = new Foo(); // alloc AND init

或简单地说:

Foo bar=new Foo();

Obj-C显然将分配与初始化分开,所有其他类似C ++的语言结合了2,思考(正确imo)你永远不想拥有部分未初始化的对象(当然,除了构造函数)。