Objective-C 类别和 .NET 扩展方法之间存在哪些差异?
我正在学习Objective-C 中的类别,它们看起来确实类似于.NET 中的扩展方法。
两种语言之间是否存在任何细微的差异或陷阱,从一种语言迁移到另一种语言时可能会导致问题,或者它们在所有意图和目的上是否都是相同的概念?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
根据我在 C# 和 ObjC 中使用这两个概念的经验,我使用这些功能来解决相同的问题。当不允许或不建议子类化时,向内置类型添加新的实例或静态方法。
我倾向于尝试避免使用类别/扩展,因为它们可能会让人觉得您过于依赖内置类,而不是构建自己的数据结构来表示您的系统。
话虽如此,一旦您理解了语法差异,我就不会遇到任何奇怪的问题。
In my experience using the two concepts in C# and ObjC, I use the features for the same problems. Adding new instance or static methods to built-in types when subclassing either isn't allowed or ill advised.
I tend to try and avoid Categories/Extensions because they can be a code smell that you are relying on built-in classes too heavily instead of building your own data structures to represent your system.
With that said, I haven't run into any strange gotchas once you understand the syntactical differences.
在 .NET 世界中,即使对象实例为
null
,扩展方法也会被调用。例如:在 Objective-C 世界中,类别中定义的实例方法不会在
nil
对象实例上调用。In the .NET world, an extension method will be called even if the object instance is
null
. For example:In the Objective-C world, instance methods defined in a category will not be called on an
nil
object instance.