2011-04-05 34 views
3

我了解Categories in Objective-C,他们似乎真的类似extension methods in .NETObjective-C类和.NET扩展方法有什么不同?

是否有两个从一种语言移动到另一个时,可能会导致问题之间的细微差异或陷阱,或者是他们的所有意图和目的,相同的概念?

+0

我对.NET中的扩展方法并不熟悉,但它们似乎与我对Objective-C中类别的理解模块化了一些语法差异一致。 – 2011-04-05 19:25:06

回答

2

在使用C#和ObjC两个概念我的经验,我用的功能,为同样的问题。不允许或不允许子类化时,将新实例或静态方法添加到内置类型。

我倾向于尽量避免分类/扩展,因为他们可以是你是依靠内置类太重,而不是建立自己的数据结构来表示你的系统的一个代码味道。

虽这么说,一旦你理解了语法差异我还没有遇到任何奇怪的陷阱。

2

在.NET世界中,扩展方法将被调用,即使对象实例是null。例如:

public static class Extensions { 
    public static string CountCharacters(this string inputString) { 
     if (inputString == null) return "None!"; 
     return inputString.Length.ToString; 
    } 
} 
public void TestExtension() { 
    string testString = null; 
    string result = testString.CountCharacters(); // returns "None!" 
} 

在Objective-C的世界中,实例方法在一个类别定义不会上的nil对象实例被调用。

@implementation NSString (CountCharacters) 
    - (NSString *)countCharacters { 
     if (self) 
      return [self length]; 
     return @"None!"; 
    } 
@end 
-(void)testCategoryMethod { 
    NSString *testString = nil; 
    NSString *result = [testString countCharacters]; 
    // 'result' will remain nil 
} 
相关问题