Objective-C和C#有什么区别?

88

我最近购买了一台Mac,并主要在VMWare Fusion下进行C#开发。有了所有漂亮的Mac应用程序,我开始考虑学习Objective-C,只需点击安装即可。

两种语言之间的语法看起来非常不同,这可能是因为Objective-C的起源是C,而C#的起源则是Java/C++。但是不同的语法可以学习,所以应该没问题。

我的主要关注点是使用该语言是否有助于生成结构良好、易读且优雅的代码。我非常喜欢C#中的特性,如LINQ和var,并想知道在Objective-C中是否有等效或更好/不同的特性。

在使用Objective-C开发时,我会错过哪些语言特性?我会获得哪些特性?

编辑:框架比较很有用和有趣,但这个问题实际上是在问语言比较(部分是我最初标记为.net的错误)。推测Cocoa和.NET都是非常丰富的框架,各自都有自己的目的,一个面向Mac OS X,另一个面向Windows。

谢谢到目前为止思考得很好并且相对平衡的观点!


27
Xcode并不完美,但它确实具有许多强大而有用的功能。如果没有支持或提供任何比较背景的情况下把某物贬低为“纯邪恶”,这种FUD并没有帮助任何人。无论如何,这与问题无关。 - Quinn Taylor
11
Xcode 3.2可能是我使用过的最好的集成开发环境,它具有优雅的断点处理、静态分析、内联错误信息和大量其他功能。顺便说一句,“Xcode”而不是“XCode”。@Nathan,我真的不明白为什么你需要在关于编程语言的讨论中毫无理由地诋毁Xcode,称其为“纯邪恶”。 - Debajit
6
使用Objective-C的一个重要好处是可以访问Cocoa框架。另外,C、C#、Java和C++都有共同的语法渊源,而Objective-C的语法则来自Smalltalk。 - Amok
4
你是使用VMWare Fusion进行C#开发的吗?只需使用Mono和MonoDevelop(它是适用于Mac和Linux的.NET和Visual Studio的开源版本)。使用Mono,你还可以创建使用C#编写的Mac和iPhone应用程序,并同时使用.NET库和Cocoa。请注意,这并不会改变原始含义。 - Robin Heggelund Hansen
5
@user668039有15年使用C#的经验?那可不得了!因为C#是在2001年发布的。 - Ian Newson
显示剩余7条评论
11个回答

-3

在我的观点中,Obj-C 中使用的方法调用使代码易于阅读,比 C# 更加优雅。而且 Obj-C 是建立在 C 之上的,所以所有的 C 代码都应该可以在 Obj-C 中正常工作。但对我来说最吸引人的是,Obj-C 是一种开放标准,因此您可以在任何系统中找到编译器。


2
ISO C# 也是一个开放标准。据我所知,目前唯一存在的 ObjC 编译器是 gcc。 - Pavel Minaev
@Pavel:还有一个便携式对象编译器(http://users.telenet.be/stes/compiler.html)和clang。 - mipadi
1
实际上,GCC不再是唯一的编译器了——Clang和LLVM是一对技术,旨在取代GCC并完成它从未能够完成的任务,包括JIT编译。这是Snow Leopard中OpenCL的核心。它们也可以扩展到其他语言,并值得一试。 - Quinn Taylor
2
我认为Objective-C的优点并不在于可移植性。相反,它更适合快速开发和减少编写代码量来完成同样的任务。 - Quinn Taylor
感谢您纠正我关于编译器可用性的错误。实际上,移植性已经存在了 - 例如,我可以在Win32上很好地使用MinGW/ObjC - 在这个意义上,它与gcc本身一样具有可移植性。当然,库可能不会存在(尽管...是否有GnuStep/Win32?),但是这种情况并不比我们在Mono中遇到的情况更糟;因此,总体而言,我认为可移植性对双方都不是一个强项。 - Pavel Minaev
C#可以使用开源项目Mono进行编译。 - Alex Angas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接