2012-11-13 8 views
5

मैं एक सी # पृष्ठभूमि जहां एक वर्ग को प्रारंभ और उसके बाद की तरह ही तोउद्देश्य सी वर्गों क्यों लौट - (आईडी) उसके अपने वर्ग

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

MyClass classInstance = new MyClass(); 
: 
: 

मैं जानता हूँ कि सी # उद्देश्य सी से अलग है लौटने से आया करने के बजाय, लेकिन मैं आसानी से समझने का एक तरीका ढूंढने की कोशिश कर रहा हूं कि उद्देश्य सी संक्रमण को आसान बनाने के लिए कैसे काम करता है। और सर्वोत्तम प्रथाओं को भी समझें।

वैसे भी, मेरा सवाल यह है कि आपको एक विधि क्यों बनाना है और इसे अपने स्वयं के प्रकार को वापस करने के बजाय "आईडी" वापस करना है? इसलिए जैसा:

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

अपना समय

+0

आपका प्रश्न इस सूत्र में जवाब था: http://stackoverflow.com/questions/8612919/in-objective-c-why-is-id-used-as-return-type-for-init-methods –

+0

मैं उसने पहले ही देखा था लेकिन यह मुझे समझ में नहीं आया। मुझे लगता है कि एक नए प्रश्न पोस्ट करने से मेरे लिए एक और आसान हो गया। क्षमा करें अगर यह जगह बर्बाद हो गई लेकिन यह अभी भी मेरी मदद की। – gdubs

+0

कोई समस्या नहीं है। शायद संदर्भ दूसरों की मदद कर सकता है। –

उत्तर

11

के लिए धन्यवाद आप विरासत की वजह से प्रारंभ तरीकों में टाइप id की एक वस्तु लौट आते हैं।

इस बारे में सोचें: आपके पास कक्षा Foo का ऑब्जेक्ट है। इसमें initWithWidgets नामक एक इनिट विधि है। अब, आप Foo का उप-वर्ग बनाते हैं और इसे Bar नाम दें। विरासत के नियमों के अनुसार, इसकी initWithWidgets विधि तक पहुंच है। यदि initWithWidgets के लिए वापसी प्रकार Foo था, तो आपकी Bar कक्षा इसे प्रारंभ करने के लिए उपयोग करने में असमर्थ होगी! वापसी का प्रकार उस ऑब्जेक्ट से अलग होगा जिसे आप तुरंत चालू करने का प्रयास कर रहे हैं। इस प्रकार, यदि आप id का उपयोग करते हैं, तो आप कह रहे हैं "इस ऑब्जेक्ट का रिटर्न प्रकार किसी भी प्रकार का हो सकता है" और आप सबक्लास के लिए सुरक्षित हैं!

+0

मैं देखता हूं, अब यह समझ में आता है! रिकॉर्ड के लिए मैंने एक अलग लिंक से एक उत्तर दिया गया प्रश्न देखा था, मुझे बस इसे समझने में मुश्किल थी। यह अधिक समझ आईएमओ बनाता है। धन्यवाद फिर से – gdubs

3

जब कोई विधि id प्रकार का ऑब्जेक्ट देता है, तो इसका मतलब है कि ऑब्जेक्ट किसी भी प्रकार का हो सकता है। उदाहरण के लिए, यदि आप एक NSMutableArray घोषित, आप ऐसा करते हैं:

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

init एक NSMutableArray वस्तु लौटा रहा है। कभी-कभी, init विधि इस उदाहरण में NSArray जैसे अभिभावक वर्ग को वापस कर सकती है। id प्रकार का उपयोग किसी ऑब्जेक्ट को वापस करने की अनुमति देता है।

+0

एक और अच्छे उदाहरण के लिए धन्यवाद! – gdubs

संबंधित मुद्दे