আমার 2 টি ক্লাস রয়েছে যার মধ্যে মেথডিএ এবং অন্যটিতে মেথবি রয়েছে। সুতরাং একটি নতুন ক্লাসে আমাকে পদ্ধতি মেথডএ এবং মেথড বিটি ওভাররাইড করতে হবে। সুতরাং আমি কীভাবে সি সি একাধিক উত্তরাধিকার অর্জন করব? আমি সিনট্যাক্স নিয়ে কিছুটা বিভ্রান্ত হয়ে পড়েছি।
উত্তর:
উদ্দেশ্য-সি একাধিক উত্তরাধিকার সমর্থন করে না, এবং আপনার এটির দরকার নেই। রচনা ব্যবহার করুন:
@interface ClassA : NSObject {
}
-(void)methodA;
@end
@interface ClassB : NSObject {
}
-(void)methodB;
@end
@interface MyClass : NSObject {
ClassA *a;
ClassB *b;
}
-(id)initWithA:(ClassA *)anA b:(ClassB *)aB;
-(void)methodA;
-(void)methodB;
@end
এখন আপনাকে কেবল প্রাসঙ্গিক আইভারটিতে পদ্ধতিটি চালিয়ে যেতে হবে। এটি আরও কোড, তবে উদ্দেশ্য-সি তে ভাষার বৈশিষ্ট্য হিসাবে একাধিক উত্তরাধিকার নেই।
ClassA
এবং ClassB
? কলিং করে methodA:
উপর MyClass
একরকম স্বয়ংক্রিয়ভাবে কল methodA:
উপর ClassA
?
মূলত আমি প্রোটোকল এবং বিভাগের সংমিশ্রণটি "পিতামাতা" হিসাবে কোড করি সিঙ্গলটনপ্যাটরনকে।
আমি যুক্ত করতে পারি না শুধুমাত্র একটি নতুন "ivar" তবে, আমি এটি যুক্ত বস্তুর সাহায্যে ঠেলাতে পারি।
#import <Foundation/Foundation.h>
@protocol BGSuperSingleton
+(id) singleton1;
+(instancetype)singleton;
@end
@interface NSObject (singleton) <BGSuperSingleton>
@end
static NSMutableDictionary * allTheSingletons;
+(instancetype)singleton
{
return [self singleton1];
}
+(id) singleton1
{
NSString* className = NSStringFromClass([self class]);
if (!allTheSingletons)
{
allTheSingletons = NSMutableDictionary.dictionary;
}
id result = allTheSingletons[className];
//PO(result);
if (result==nil)
{
result = [[[self class] alloc]init];
allTheSingletons[className]=result;
[result additionalInitialization];
}
return result;
}
-(void) additionalInitialization
{
}
যখনই আমি কোনও শ্রেণি চাই এই বিজিএস্পারসিংলেটনকে "উত্তরাধিকারী" করি আমি কেবল এটিই করি:
#import "NSObject+singleton.h"
এবং যোগ করুন @interface MyNewClass () <BGSuperSingleton>
আপনি কি প্রোটোকল সম্পর্কে জানেন, প্রোটোকল হ'ল একাধিক উত্তরাধিকার প্রয়োগের উপায়
JAVA
, Interfaces
একাধিক উত্তরাধিকার প্রদান বা নকল করা হয় না।