2012-11-13 3 views
5

私は、あなたがクラスを初期化し、その後、私はC#はObjective Cの異なる知っているので、Objective Cのクラス、なぜ返す - (ID)の代わりに、それ自身のクラスの

public class MyClass{ 
    public int Id; 
    public string Name; 
} 

MyClass classInstance = new MyClass(); 
: 
: 

のように自分自身を返すC#の背景から来ました私は、客観的なcがどのようにして移行を容易にするかを簡単に理解する方法を見つけようとしています。また、ベストプラクティスも把握してください。

とにかく、私の質問は、それ自身の型を返す代わりにメソッドを作成し、 "id"を返さなければならない理由です。これと同じように:あなたの時間

+0

あなたの質問はこのスレッドで回答されました:http://stackoverflow.com/questions/8612919/in-objective-c-why-is-id-used-as-return-type-for-init-methods –

+0

すでにそれが見えましたが、私には意味がありませんでした。私は新しい質問を投稿すると、私が別の人に簡単になったと思う。スペースを無駄にしてもそれは私を助けてくれました。 – gdubs

+0

問題ありません。リファレンスが他の人を助けるかもしれない。 –

答えて

11

ため

- (id)initWithID:(NSInteger)id name:(NSString *)name 
{ 
    self = [self init]; 
    if (self) { 
     self.ID = id; 
     self.name = name; 
    } 
    return self; 
} 

ありがとうございますので、相続の初期化メソッドでタイプidのオブジェクトを返します。

このように考える:クラスFooのオブジェクトがあります。それはinitWithWidgetsと呼ばれるinitメソッドを持っています。ここで、Fooというサブクラスを作成し、Barという名前を付けます。継承のルールによって、initWithWidgetsメソッドにアクセスできます。 initWithWidgetsの戻り値の型がFooだった場合は、Barクラスを使用して初期化することはできません。戻り値の型は、インスタンス化しようとしているオブジェクトとは異なります。したがって、idを使用している場合は、「このオブジェクトの戻り値の型は任意の型にすることができます」と言っているので、サブクラスで安全です。

+0

私は今、それが理にかなっているのを見ます!記録のために私は別のリンクから答えられた質問を見ました。私はちょうどそれを理解するのに苦労しました。これはもっと意味をなさない。再度ありがとう – gdubs

3

メソッドがタイプidのオブジェクトを返す場合、そのオブジェクトはどのタイプでもよいことを意味します。たとえば、あなたがNSMutableArrayを宣言した場合、あなたはこれを行う:

NSMutableArray *someArray = [[NSMutableArray alloc] init]; 

initNSMutableArrayオブジェクトを返しています。ただし、initメソッドは、この例ではNSArrayのような親クラスを返すことがあります。 id型を使用すると、すべてのオブジェクトを返すことができます。

+0

もう一つの良い例をありがとう! – gdubs

関連する問題