目标C的C#中对象的等价物是什么?

时间:2010-05-27 22:55:48

标签: c# objective-c types ambiguity

在c#中我可以声明object o;然后我可以分配o=(float)5.0;o="a string."是否有与Objective-C等效的内容?我尝试使用id,但它不采用原始类型,如float或integer。谢谢你的帮助。

5 个答案:

答案 0 :(得分:11)

Objective-C在CLR的单词中没有“统一类型系统”。换句话说,作为C的超集,Objective-C的原始类型与对象实例完全是不同的野兽。 id类型可以将引用(OS X / iPhone Objective-C运行时中的指针)存储到任何对象实例。 C的原始类型(例如intfloat等)必须包含在NSValueNSNumber中以分配给类型id。当然,这正是C#编译器正在做的事情。只是在C#中,你不必明确地进行(un)拳击转换。

很快,代码就像

float val;
id obj = [NSNumber numberWithFloat:val];
...
float v = [obj floatValue];
如果不幸的是,按照现代标准,

将成为第二天性。

答案 1 :(得分:3)

实际上没有这样的事情。您可以使用NSNumberNSValue将本机数据类型作为对象进行处理。 NSString会做字符串。您可以将所有这些分配给id类型的变量,但您需要使用正确的类init方法创建它们。

答案 2 :(得分:3)

你是对的,id仅适用于ObjC对象引用。如果要引用带有id引用的int,则需要将其装入NSNumber。顺便说一句,C#也​​是这些原语,它只是自动完成。

答案 3 :(得分:2)

在我的日子里,我们不得不在雪地上行走15英里,上坡,使用void pointers。哦,我们没有StackOverflow!

答案 4 :(得分:1)

实际上,C#数据类型只是它们各自类的别名,这就是它们可以分配给对象类型的原因。 例如,int实际上是一个名为Int32的类。

正如@Barry先前提到的,Objective-C的情况并非如此。