শ্রেণি এবং উদাহরণ পদ্ধতিগুলির মধ্যে পার্থক্য কী?


448

একটি শ্রেণি পদ্ধতি এবং একটি উদাহরণ পদ্ধতির মধ্যে পার্থক্য কী?

উদাহরণস্বরূপ পদ্ধতিগুলি কি অ্যাক্সেসরগুলি (গেটার্স এবং সেটটার) রয়েছে যখন শ্রেণি পদ্ধতিগুলি আরও অনেক কিছু?

উত্তর:


673

অন্যান্য উত্তরগুলির মতো বেশিরভাগই বলেছেন যে, উদাহরণের পদ্ধতিগুলি একটি শ্রেণীর উদাহরণ ব্যবহার করে, যেখানে একটি শ্রেণির পদ্ধতিটি কেবল শ্রেণির নাম সহ ব্যবহার করা যেতে পারে। উদ্দেশ্য-সি এগুলি এভাবে সংজ্ঞায়িত করা হয়:

@interface MyClass : NSObject

+ (void)aClassMethod;
- (void)anInstanceMethod;

@end

সেগুলি তখন এর মতো ব্যবহার করা যেতে পারে:

[MyClass aClassMethod];

MyClass *object = [[MyClass alloc] init];
[object anInstanceMethod];

বর্গ পদ্ধতি কিছু বাস্তব জগতে উদাহরণ মত অনেক ফাউন্ডেশন শ্রেণীর উপর সুবিধার পদ্ধতি NSString'র +stringWithFormat:বা NSArrayএর +arrayWithArray:। একটি উদাহরণ পদ্ধতি NSArrayহ'ল -countপদ্ধতি।


7
ভাল উত্তর. এটিও লক্ষণীয় যে আপনি পদ্ধতিগুলি বর্ণনা করার জন্য একটি নির্দিষ্ট শর্টহ্যান্ড স্বরলিপি দেখতে পাবেন। উদাহরণস্বরূপ, + [NSString স্ট্রিংউইথফোর্ম্যাট:] হ'ল ক্লাস পদ্ধতি + স্ট্রিংউইথফোর্ম্যাট: এনএসএসটিং এ; - [এনএসআরাই অবজেক্টআটিআইডেক্স:] একটি উদাহরণ পদ্ধতি। একাধিক নির্বাচক অংশগুলির সাথে পদ্ধতিগুলি এমনভাবে লেখা হয় - [NSMutableD dictionary সেটঅবজেক্ট: forKey:] ইত্যাদি You আপনি প্রায়শই কোকো প্রতিক্রিয়া, ডকুমেন্টেশন এবং এক্সকোডে এই স্বরলিপিটি দেখতে পাবেন।
কুইন টেলর

149
আমি যুক্ত করব যে একটি শ্রেণিবদ্ধ পদ্ধতিকে অন্যান্য অনেক ভাষায় "স্ট্যাটিক" পদ্ধতি বলা হয়। এবং মূল প্রশ্নের উত্তর দেওয়ার জন্য, অ্যাক্সেসরগুলি উদাহরণ পদ্ধতি কারণ তারা একটি নির্দিষ্ট উদাহরণের স্থিতি স্থাপন করে এবং পাচ্ছে। উপরের উদাহরণে, এনএসআরারি গণনা একটি নির্দিষ্ট উদাহরণে অবজেক্টের সংখ্যা প্রদান করে।
ব্রায়ান প্যান

2
"যেখানে শ্রেণিক পদ্ধতিটি কেবল শ্রেণির নাম সহ ব্যবহার করা যেতে পারে।" বা শ্রেণীর অবজেক্ট
ব্যবহারকারী 102008

2
আমার উত্তেজনার জন্য দুঃখিত ... তবে আমি কেবল তফাতটি এবং এর সম্ভাবনা শিখেছি। ক্লাসের পদ্ধতিগুলি শিং এবং তাই সিঙ্গলটন ক্লাসগুলি! আমি প্রেমে পড়েছি! <3
পাভান

2
@ ব্রায়ানপ্যান স্ট্যাটিক এবং শ্রেণিবদ্ধ পদ্ধতি এক নয়। এগুলি একই রকম তবে তাদের আলাদা নামকরণের কারণ হ'ল তারা আলাদাভাবে কাজ করে। উদাহরণস্বরূপ, স্থির পদ্ধতিগুলি ওভাররাইড করা যায় না।
সুলতান

190

সমস্ত প্রযুক্তিগত বিবরণ অন্যান্য উত্তরে খুব সুন্দরভাবে কভার করা হয়েছে। আমি কেবল একটি সাধারণ উপমা ভাগ করতে চাই যা আমার মনে হয় যে একটি বর্গ এবং উদাহরণের মধ্যে পার্থক্যটি সুন্দরভাবে বর্ণনা করে:

এখানে চিত্র বর্ণনা লিখুন

একটি শ্রেণি একটি বাড়ির ব্লুপ্রিন্টের মতো : আপনার কেবল একটি নীলনকশা রয়েছে এবং (সাধারণত) আপনি কেবল নীলনকশা দিয়ে এত কিছু করতে পারবেন না।

এখানে চিত্র বর্ণনা লিখুন

একটি উদাহরণ (বা কোনও অবজেক্ট ) হ'ল আসল বাড়ি যা আপনি নীল ছাপের উপর ভিত্তি করে তৈরি করেন: আপনি একই ব্লুপ্রিন্ট থেকে প্রচুর ঘর তৈরি করতে পারেন। তারপরে আপনি প্রতিটি বাড়ির দেয়ালগুলিকে আলাদা রঙ করতে পারেন ঠিক যেমন আপনি অন্যান্য দৃষ্টান্তগুলিকে প্রভাবিত না করে কোনও শ্রেণীর প্রতিটি উদাহরণের বৈশিষ্ট্যগুলি স্বাধীনভাবে পরিবর্তন করতে পারেন।


6
@ জোহানেসফেরেনক্রুগ নিসলিভাবে এখানে শ্রেণি এবং অবজেক্টের ধারণাটি ব্যাখ্যা করেছেন ।আসলে আসল প্রশ্নটি নয় difference between class method and an instance method ;
শেখু

1
ক্লাস বনাম কোনও শ্রেণির ইনস্ট্যান্সের সঠিক ব্যাখ্যা। ক্লাসগুলি newbies একটি অদ্ভুত ধারণা এবং এটি এটি এর সবচেয়ে মৌলিক উপায়ে ব্যাখ্যা করে।
অ্যালেক্স ম্যাকফারসন

1
@ জোহানেসফেরেনক্রুগ সত্যই একটি ভাল ব্যাখ্যা, যা আমাকে ভাবতে বাধ্য করেছিল যে উভয়রই কীভাবে আলাদা হয় এবং কখন উভয় ব্যবহার করতে হয়
কীভাবে আলাদা চেনসমিল

1
এমন দুর্দান্ত ব্যাখ্যা :)
প্রবীনকুমার

1
ভাল উপমা। দয়া করে কেউ এই লোকটিকে এক বছরের সরবরাহ পিজ্জা দিন as
জিনকোড

102

অন্যান্য উত্তরগুলির মতোই বলা হয়েছে, উদাহরণের পদ্ধতিগুলি কোনও বস্তুর উপর পরিচালিত হয় এবং তার উদাহরণের ভেরিয়েবলগুলির অ্যাক্সেস থাকে, যখন একটি শ্রেণি পদ্ধতি একটি সামগ্রিকভাবে একটি শ্রেণিতে কাজ করে এবং নির্দিষ্ট উদাহরণের ভেরিয়েবলগুলিতে অ্যাক্সেস থাকে না (যদি আপনি উদাহরণটি পাস না করেন তবে প্যারামিটার)।

শ্রেণি পদ্ধতির একটি ভাল উদাহরণ হ'ল একটি পাল্টা ধরণের পদ্ধতি, যা একটি শ্রেণীর মোট উদাহরণগুলির সংখ্যা প্রদান করে। ক্লাসের পদ্ধতিগুলি একটি দিয়ে শুরু হয় +, যখন উদাহরণগুলি একটি দিয়ে শুরু হয় -। উদাহরণ স্বরূপ:

static int numberOfPeople = 0;

@interface MNPerson : NSObject {
     int age;  //instance variable
}

+ (int)population; //class method. Returns how many people have been made.
- (id)init; //instance. Constructs object, increments numberOfPeople by one.
- (int)age; //instance. returns the person age
@end

@implementation MNPerson
- (id)init{
    if (self = [super init]){
          numberOfPeople++;
          age = 0;
    }    
    return self;
}

+ (int)population{ 
     return numberOfPeople;
}

- (int)age{
     return age;
}

@end

main.m:

MNPerson *micmoo = [[MNPerson alloc] init];
MNPerson *jon = [[MNPerson alloc] init];
NSLog(@"Age: %d",[micmoo age]);
NSLog(@"%Number Of people: %d",[MNPerson population]);

আউটপুট: বয়স: 0 লোক সংখ্যা: 2

আরেকটি উদাহরণ হ'ল যদি আপনার এমন কোনও পদ্ধতি থাকে যা আপনি চান যে ব্যবহারকারী কল করতে সক্ষম হন, কখনও কখনও এটি ক্লাস পদ্ধতি হিসাবে তৈরি করা ভাল। উদাহরণস্বরূপ, আপনার যদি ম্যাথফিউশনস নামে একটি শ্রেণি থাকে তবে আপনি এটি করতে পারেন:

+ (int)square:(int)num{ 
      return num * num;
}

তাহলে ব্যবহারকারী কল করবে:

[MathFunctions square:34];

কখনও ক্লাস ইনস্ট্যান্ট ছাড়া!

আপনি এনএসআরির মতো অটোরিলেজড অবজেক্টগুলি ফিরিয়ে দেওয়ার জন্য শ্রেণিকরণও ব্যবহার করতে পারেন

+ (NSArray *)arrayWithObject:(id)object

এটি একটি অবজেক্ট নেয়, এটিকে অ্যারে রাখে এবং অ্যারের একটি স্বতঃস্ফূর্ত সংস্করণ প্রদান করে যা মেমরি পরিচালিত হতে হবে না, অস্থায়ী অ্যারেগুলির জন্য দুর্দান্ত এবং কী নয়।

আমি আশা করি আপনি কখন এবং / বা আপনার কেন ক্লাসের পদ্ধতি ব্যবহার করা উচিত তা বুঝতে পেরেছেন !!


1
মাইক্রো, আমি আপনাকে "স্ট্যাটিক ইনট নাম্বার অফফিল = 0;" রাখার পরামর্শ দিচ্ছি কোড বিন্যাসে পাঠ্য? আমি নমুনা কোডের উপরে এটি লক্ষ্য না করা পর্যন্ত আমি বিভ্রান্ত হয়ে পড়েছিলাম। তা ছাড়া সত্যই সংক্ষিপ্ত উত্তর।
মুবিবব

2
আমার নবাগত বিভ্রান্তি ক্ষমা করুন, তবে কেন আপনার প্রয়োজন দুটি পরিবর্তনশীল "বয়স" এবং উদাহরণ পদ্ধতি "বয়স" উভয়ই দরকার? উদাহরণস্বরূপ পরিবর্তনশীল "বয়স" এর জন্য গেটর এবং সেটার কি @ সাইন্টিটিজ দিয়ে তৈরি করা হবে না?
selytch

@selytch "বয়স" সংশ্লেষ ব্যবহারের জন্য একটি সম্পত্তি হিসাবে সংজ্ঞায়িত করতে হবে।
micah94

36

একটি উদাহরণ পদ্ধতি শ্রেণীর উদাহরণ হিসাবে প্রয়োগ হয় (অর্থাত্ কোনও বস্তু) যেখানে একটি শ্রেণি পদ্ধতি ক্লাসের মধ্যেই প্রযোজ্য।

সি # তে একটি শ্রেণি পদ্ধতি স্থির হিসাবে চিহ্নিত হয়। স্থিতিশীল হিসাবে চিহ্নিত নয় এমন পদ্ধতি এবং বৈশিষ্ট্য হ'ল উদাহরণ পদ্ধতি।

class Foo {
  public static void ClassMethod() { ... }
  public void InstanceMethod() { ... }
}

1
আরগ - দুঃখিত, আমি কেবল লক্ষ্য করেছি এটি একটি ওবজ-সি প্রশ্ন। আশা করি আমার উত্তরটি এখনও প্রয়োগ হয়েছে তবে দয়া করে ভোট দিন বা মুছতে ভোট দিন।
রবার্ট হরভিক

6
কোন ক্ষতি করা হয়নি। আপনার উত্তরের প্রথম অংশটি একটি সাধারণ ওওপি নীতি হিসাবে সঠিক এবং এটি অবশ্যই উদ্দেশ্য-সি-তে প্রযোজ্য। আপনি যদি এই জাতীয় প্রশ্ন দেখতে না চান তবে আপনার ট্যাগগুলির তালিকায় উপেক্ষা করার জন্য আপনি "উদ্দেশ্য-সি" যুক্ত করতে পারেন, যদিও কোনও অংশগ্রহণ অবশ্যই স্বাগত। :-)
কুইন টেলর

16

আপনার প্রশ্নের উত্তর উদ্দেশ্য-সি সম্পর্কিত সুনির্দিষ্ট নয়, তবে বিভিন্ন ভাষায় শ্রেণিবদ্ধ পদ্ধতিগুলিকে স্ট্যাটিক পদ্ধতি বলা যেতে পারে।

শ্রেণি পদ্ধতি এবং উদাহরণ পদ্ধতির মধ্যে পার্থক্য

ক্লাস পদ্ধতি

  • ক্লাস ভেরিয়েবলগুলি পরিচালনা করুন (তারা উদাহরণ ভেরিয়েবল অ্যাক্সেস করতে পারবেন না)
  • প্রয়োগ করার জন্য কোনও বস্তুর তাত্ক্ষণিক প্রয়োজন হয় না
  • কখনও কখনও কোড গন্ধ হতে পারে (কিছু লোক যারা ওওপিতে নতুন তারা কোনও ওও পরিবেশে স্ট্রাকচার্ড প্রোগ্রামিং করতে ক্রাচ হিসাবে ব্যবহার করেন)

তাত্ক্ষণিক পদ্ধতি

  • উদাহরণস্বরূপ ভেরিয়েবল এবং বর্গ ভেরিয়েবলগুলি পরিচালনা করুন
  • চালনা করার জন্য একটি তাত্ক্ষণিক অবজেক্ট থাকতে হবে

ইনস্ট্যান্স পদ্ধতি ক্লাস ভেরিয়েবলগুলিতে কাজ করতে পারে?
蘇健豪

16

আমি মনে করি এটি বোঝার সর্বোত্তম উপায় হ'ল allocএবং init। এই ব্যাখ্যাটিই আমাকে পার্থক্যগুলি বুঝতে সাহায্য করেছিল।

ক্লাস পদ্ধতি

পুরোপুরি ক্লাসে একটি ক্লাস পদ্ধতি প্রয়োগ করা হয়। আপনি যদি allocপদ্ধতিটি পরীক্ষা করেন তবে এটি একটি শ্রেণিবদ্ধ পদ্ধতি যা দ্বারা নির্দেশিত+ যা পদ্ধতি ঘোষণার আগে । এটি একটি শ্রেণি পদ্ধতি কারণ এটি শ্রেণীর একটি নির্দিষ্ট উদাহরণ তৈরি করতে শ্রেণিতে প্রয়োগ করা হয়।

তাত্ক্ষণিক পদ্ধতি

আপনি ক্লাসের চেয়ে সম্পূর্ণ ক্লাসের পরিবর্তে কোনও শ্রেণীর নির্দিষ্ট উদাহরণটি সংশোধন করতে একটি উদাহরণ পদ্ধতি ব্যবহার করেন। initউদাহরণস্বরূপ ( -পদ্ধতি ঘোষণার আগে একটি দিয়ে বোঝানো), একটি উদাহরণ পদ্ধতি কারণ আপনি সাধারণত শ্রেণীর তৈরি হওয়ার পরে এটির বৈশিষ্ট্যগুলি পরিবর্তন করছেন alloc

উদাহরণ

NSString *myString = [NSString alloc];

শ্রেণীর allocকোনও উদাহরণ উত্পন্ন করতে আপনি ক্লাস পদ্ধতিটি কল করছেন । লক্ষ্য করুন কীভাবে বার্তা গ্রহণকারী একটি শ্রেণি।

[myString initWithFormat:@"Hope this answer helps someone"];

আপনি এর উদাহরণ হিসেবে বলা যায় পরিবর্তন হয় NSStringনামক myStringযে উদাহরণস্বরূপ কিছু বৈশিষ্ট্য সেট করে। লক্ষ্য করুন কীভাবে বার্তা গ্রহণকারী একটি উদাহরণ (শ্রেণীর অবজেক্ট NSString)।


"বরাদ্দ" পদ্ধতিটি পরীক্ষা করে আপনি কী বোঝাতে চান? আপনি কি আমাকে ডকুমেন্টেশনের একটি নির্দিষ্ট জায়গায় নির্দেশ করতে পারেন? (সম্পাদনা) - আহ আহহীন নয়, হ্যাঁ এনএসবজেক্ট ডক্সে এটি "টাস্কস" - এর অধীনে বলেছে - বিকাশকারী.অ্যাপল
ইথান পার্কার

এটি উপলব্ধি করার জন্য এটি আসলে কী করে তা আপনার সত্যিকারের বোঝার দরকার নেই, কেবল এটি ক্লাসে প্রয়োগ করা হয়। সহজভাবে রাখুন: allocঅবজেক্টের জন্য পর্যাপ্ত মেমরি বরাদ্দ করে, বস্তুর initঅবস্থা নির্ধারণ করতে সেই মেমরি ঠিকানার মধ্যে যা রয়েছে তা সংশোধন করবে। আমরা কোনও অবজেক্টটিকে সংশোধন করার জায়গা না থাকলে তাকে সংশোধন করতে পারি না, তাই আমরা allocক্লাসে ব্যবহার করি যা আমাদের সেই জায়গাটি দেবে বলে সিদ্ধান্ত নেবে।
অ্যাডাম ওয়েট

6

শ্রেণীর পদ্ধতিগুলি সাধারণত শ্রেণীর উদাহরণ তৈরি করতে ব্যবহৃত হয়

উদাহরণস্বরূপ, এটি পাঠানো প্যারামিটারের সাথে [NSString stringWithFormat:@"SomeParameter"];একটি NSStringউদাহরণ দেয়। সুতরাং এটি যেহেতু এটি একটি শ্রেণিবদ্ধ পদ্ধতি যা এর ধরণের কোনও অবজেক্টকে ফেরত দেয়, এটিকে একটি সুবিধা পদ্ধতিও বলা হয়।


6

সুতরাং আমি যদি এটি সঠিকভাবে বুঝতে পারি।

কোনও classপদ্ধতির আপনাকে এটি ব্যবহার / প্রক্রিয়া করার জন্য সেই অবজেক্টের উদাহরণ বরাদ্দ করতে হবে না। একটি classপদ্ধতি স্বয়ংসম্পূর্ণ এবং সেগুলি শ্রেণীর কোনও বস্তুর অবস্থার কোনও নির্ভরতা ছাড়াই পরিচালনা করতে পারে। একটি classপদ্ধতি তার নিজের সমস্ত কাজের জন্য মেমরি বরাদ্দ করবে এবং সম্পন্ন হওয়ার পরে ডিএলোকট করবে, যেহেতু class শ্রেণীর কোনও উদাহরণ পূর্ববর্তী কলগুলিতে বরাদ্দকৃত কোনও মেমরি ক্লাস পদ্ধতিতে মুক্ত করতে সক্ষম হবে না।

একজন instance পদ্ধতি ঠিক বিপরীত। আপনি যদি শ্রেণীর কোনও উদাহরণ বরাদ্দ না করেন তবে আপনি এটি কল করতে পারবেন না। এটি একটি সাধারণ বর্গের মতো যার একটি নির্মাণকারী রয়েছে এবং এতে একজন ডেস্ট্রাক্টর থাকতে পারে (যা বরাদ্দকৃত সমস্ত স্মৃতি পরিষ্কার করে)।

বেশিরভাগ সম্ভাবনায় (আপনি যদি পুনরায় ব্যবহারযোগ্য গ্রন্থাগার না লিখে থাকেন তবে আপনার classভেরিয়েবলের প্রয়োজন হবে না) ।


1
একটি ক্লাস পদ্ধতি যেখানে আপনার শ্রেণিবদ্ধ পদ্ধতি প্রয়োজন তা হ'ল দৃষ্টান্ত তৈরি করা creation আপনার অবশ্যই এখনও কোনও দৃষ্টান্ত না রেখে দৃষ্টান্ত তৈরি করতে সক্ষম হবেন, অন্যথায় প্রথম দৃষ্টান্তটি কখনই তৈরি করা যায়নি। এজন্যই + বরাদ্দ একটি শ্রেণি পদ্ধতি এবং হতে হবে।
gnasher729

4

উদাহরণগুলির ক্লাসগুলির উদাহরণগুলিতে পদ্ধতিগুলি পরিচালনা করে (যেমন, "বস্তু")। ক্লাসের পদ্ধতিগুলি ক্লাসগুলির সাথে সম্পর্কিত হয় (বেশিরভাগ ভাষা staticএই লোকগুলির জন্য কীওয়ার্ড ব্যবহার করে )।


3

উদাহরণস্বরূপ এমন একটি গেম নিন যেখানে প্রচুর গাড়ি তৈরি হয় .. প্রত্যেকটি শ্রেণির সিসিআর এর অন্তর্গত। যখন কোনও গাড়ি তাত্ক্ষণিক হয় তখন তা কল করে

[CCar registerCar:self]

সুতরাং সিসিআর ক্লাস, প্রতিটি সিসিআর ইনস্ট্যান্টিয়েন্টের একটি তালিকা তৈরি করতে পারে। আসুন যাক ব্যবহারকারী কোনও স্তর শেষ করে, এবং সমস্ত গাড়ি সরিয়ে ফেলতে চায় ... আপনি যে কোনওটি করতে পারেন: 1- আপনি নিজে তৈরি করা প্রতিটি সিসার একটি তালিকাতে যান এবং করুনwhicheverCar.remove(); বা 2- সিসকারে একটি সরানো সমস্ত কার্ড পদ্ধতি যুক্ত করুন, যা এটি করবে আপনি যখন [সিসার অপসারণ সমস্ত কার্ড] কল করবেন তখন আপনার জন্য। অর্থাত allCars[n].remove();

বা উদাহরণস্বরূপ, আপনি ব্যবহারকারীর পুরো অ্যাপ্লিকেশনটির জন্য একটি ডিফল্ট ফন্টের আকার নির্দিষ্ট করার মঞ্জুরি দেন যা প্রারম্ভকালে লোড এবং সংরক্ষণ করা হয়। ক্লাস পদ্ধতি না থাকলে আপনাকে এমন কিছু করতে হতে পারে

fontSize = thisMenu.getParent().fontHandler.getDefaultFontSize();

ক্লাস পদ্ধতিটি দিয়ে আপনি পালাতে পারবেন [FontHandler getDefaultFontSize]

আপনার রিমুভওয়ালস ফাংশন হিসাবে, আপনি দেখতে পাবেন যে সি # এর মতো ভাষাগুলিতে টোলওয়ার বা টুঅপারের মতো কয়েকটি নির্দিষ্ট পদ্ধতি রয়েছে।

উদাঃ myString.removeVowels() এবং String.removeVowels(myString) (ওবজিসিতে এটি হবে would[String removeVowels:myString] )।

এই ক্ষেত্রে উদাহরণটি সম্ভবত শ্রেণি পদ্ধতি কল করে, তাই উভয় উপলব্ধ। অর্থাত

public function toLower():String{
  return String.toLower();
}

public static function toLower( String inString):String{
 //do stuff to string..
 return newString;
}

মূলত myString.toLower() কলগুলি [String toLower:ownValue]

এর কোন সুস্পষ্ট উত্তর নেই, তবে আপনি যদি মনে করেন যে কোনও শ্রেণির পদ্ধতিটি আপনার কোডকে উন্নত করবে, একটি শট দেবে এবং মনে রাখবেন যে কোনও শ্রেণি পদ্ধতি আপনাকে কেবল অন্য শ্রেণীর পদ্ধতি / ভেরিয়েবলগুলি ব্যবহার করতে দেয়।


3

বর্গ পদ্ধতি

স্ট্যাটিক হিসাবে ঘোষণা করা হয় যা পদ্ধতি। ক্লাসের উদাহরণ তৈরি না করেই পদ্ধতিটি বলা যেতে পারে। ক্লাস পদ্ধতিগুলি কেবল শ্রেণীর সদস্যদের উপরই পরিচালনা করতে পারে এবং উদাহরণের সদস্যদের জন্য নয় কারণ শ্রেণি পদ্ধতিগুলি উদাহরণ সদস্যদের সম্পর্কে অজানা। শ্রেণীর ইনস্ট্যান্স পদ্ধতিগুলিও শ্রেণীর কোনও পদ্ধতির মধ্যে থেকে কল করা যায় না যতক্ষণ না সেগুলি শ্রেণীর উদাহরণ হিসাবে ডাকা হয় না।

তাত্ক্ষণিক পদ্ধতি

অন্যদিকে শ্রেণীর নামকরণের আগে তাদের উপস্থিতির একটি উদাহরণ প্রয়োজন, সুতরাং নতুন কীওয়ার্ড ব্যবহার করে কোনও শ্রেণির উদাহরণ তৈরি করা দরকার। ইনস্ট্যান্স পদ্ধতি ক্লাসের নির্দিষ্ট উদাহরণগুলিতে কাজ করে। তাত্ক্ষণিক পদ্ধতিগুলি স্থির হিসাবে ঘোষণা করা হয় না।


এটি "বরাদ্দ" কীওয়ার্ড দিয়ে তৈরি করা যেতে পারে কেবল "নতুন" নয়। এছাড়াও, অবজেক্টিভ-সি কোনও উদাহরণ পদ্ধতিতে কল করার জন্য কোনও দাবির উপস্থিতি দাবি করে না, আপনি নাল পয়েন্টারে মেসেজ পাঠাতে পারেন।
এলভিস স্ট্রেজডিন্স

3

উদ্দেশ্য-সিতে সমস্ত পদ্ধতি একটি "-" বা "+" অক্ষর দিয়ে শুরু হয়। উদাহরণ:

@interface MyClass : NSObject
// instance method
- (void) instanceMethod;

+ (void) classMethod;
@end

"+" এবং "-" অক্ষর নির্দিষ্ট করে দেয় যে পদ্ধতিটি যথাক্রমে একটি class methodবা একটি কিনা instance method

পার্থক্য স্পষ্ট হবে যদি আমরা এই পদ্ধতিগুলি কল করি। এখানে পদ্ধতিগুলি ঘোষণা করা হয়েছে MyClass

instance method শ্রেণীর উদাহরণ প্রয়োজন:

MyClass* myClass = [[MyClass alloc] init];
[myClass instanceMethod];

MyClassঅন্যান্য পদ্ধতির অভ্যন্তরে MyClassব্যবহারের উদাহরণ পদ্ধতিগুলি কল করতে পারে self:

-(void) someMethod
{
    [self instanceMethod];
}

তবে, class methodsক্লাসে নিজেই ডাকা উচিত:

[MyClass classMethod];

বা:

MyClass* myClass = [[MyClass alloc] init];
[myClass class] classMethod];

এটি কাজ করবে না:

// Error
[myClass classMethod];
// Error
[self classMethod];

3

ক্লাসের মেথডস


একটি শ্রেণি পদ্ধতি সাধারণত শ্রেণীর একটি নতুন উদাহরণ তৈরি করে বা শ্রেণীর কিছু বৈশ্বিক বৈশিষ্ট্য পুনরুদ্ধার করে। ক্লাস পদ্ধতিগুলি একটি উদাহরণে কাজ করে না বা উদাহরণ ভেরিয়েবলের কোনও অ্যাক্সেস রয়েছে।


পদ্ধতি ইনস্টল করুন


একটি উদাহরণ পদ্ধতি ক্লাসের একটি নির্দিষ্ট উদাহরণে কাজ করে। উদাহরণস্বরূপ, আপনি যে অ্যাক্সেসরগুলি প্রয়োগ করেছেন সেটি হ'ল সমস্ত উদাহরণ পদ্ধতি। আপনি এগুলিকে নির্দিষ্ট কোনও অবজেক্টের উদাহরণ ভেরিয়েবল সেট করতে বা পেতে ব্যবহার করেন।


ডাকা


একটি উদাহরণ পদ্ধতিতে অনুরোধ জানাতে, আপনি ক্লাসের উদাহরণটিতে বার্তাটি প্রেরণ করেন।

কোনও শ্রেণি পদ্ধতিতে অনুরোধ করতে আপনি ক্লাসে সরাসরি বার্তাটি পাঠান।


উত্স: আইওএস - উদ্দেশ্য-সি - শ্রেণির পদ্ধতি এবং তাত্ক্ষণিক পদ্ধতি


1

শ্রেণি পদ্ধতিগুলি কোনও উদাহরণ ভেরিয়েবলের মান পরিবর্তন বা জানতে পারে না। উদাহরণস্বরূপ পদ্ধতিটি কোনও শ্রেণিবদ্ধ হতে পারে কিনা তা জানার জন্য এটি মাপদণ্ড হওয়া উচিত।


-1 আমার কাছ থেকে, কারণ আপনি ক্লাস পদ্ধতিতে উদাহরণটি পাস করতে পারেন এবং এটি এটি পরিবর্তনশীলের মানগুলি পরিবর্তন করতে এবং জানতে সক্ষম হবে।
এলভিস স্ট্রেজডিনস

1

এছাড়াও মনে রাখবেন, একই ধারণাটি ভেরিয়েবলের ক্ষেত্রে প্রযোজ্য। পদ্ধতিগুলি / ক্রিয়াকলাপগুলির জন্য আপনি যেমন চলকগুলি সম্পর্কে একই কথা বলছেন তখন আপনি স্থির, সদস্য, উদাহরণস্বরূপ, শ্রেণি ইত্যাদির মতো পদগুলি দেখতে পাবেন।

মনে হচ্ছে ওবজ-সি সম্প্রদায়ের সাধারণ শব্দটি উদাহরণস্বরূপ পরিবর্তনশীল হিসাবে আইভার, তবে আমি এখনও ওবজ-সি লোক নই।


1

উপরের উত্তরের একটি আপডেট, আমি সম্মত হচ্ছি যে পদ্ধতিগুলি কোনও শ্রেণীর উদাহরণ ব্যবহার করে, যেখানে একটি শ্রেণির পদ্ধতিটি কেবল শ্রেণীর নাম সহ ব্যবহার করা যেতে পারে।

উদ্দেশ্য পদ্ধতিতে স্বয়ংক্রিয় রেফারেন্স গণনা অস্তিত্ব আসার পরে উদাহরণ পদ্ধতি এবং শ্রেণীর পদ্ধতির মধ্যে আর কোনও পার্থক্য নেই।

উদাহরণস্বরূপ [NS StringWithformat:..]একটি শ্রেণি পদ্ধতি এবং [[NSString alloc] initwihtformat:..]একটি উদাহরণ পদ্ধতি, উভয়ই আরসি-র পরে এক হয় same


1

দ্রষ্টব্য: এটি কেবলমাত্র সিউডো কোড ফর্ম্যাটে

ক্লাস পদ্ধতি

প্রায় যা করা দরকার তা হ'ল সংকলনের সময় । এটির জন্য কোনও ব্যবহারকারীর ইনপুট লাগবে না, বা এর গণনা কোনও উদাহরণের ভিত্তিতে নয়। এ সম্পর্কে সমস্ত কিছুই বর্গ / ব্লুপ্রিন্টের উপর ভিত্তি করে —— যা অনন্য ie অর্থাৎ আপনার কাছে এক শ্রেণির জন্য একাধিক ব্লুপ্রিন্ট নেই। সংকলনের সময় আপনি কি বিভিন্ন প্রকারের থাকতে পারেন? না, সুতরাং শ্রেণিটি অনন্য এবং তাই আপনি যতবার ক্লাস পদ্ধতিতে কল করুন পয়েন্টারটি এটির নির্দেশক একই হবে।

PlanetOfLiving: return @"Earth" // No matter how many times you run this method...nothing changes.

তাত্ক্ষণিক পদ্ধতি

বিপরীতে উদাহরণ পদ্ধতিটি রানটাইমের সময় ঘটে থাকে, কারণ এটি তখনই আপনি এমন কোনও উদাহরণ তৈরি করেছেন যা প্রতিটি তাত্ক্ষণিক ক্ষেত্রে পৃথক হতে পারে।

initWithName: @"John" lastName: @"Doe"Age:12 @"cool"
initWithName: @"Donald" lastName: @"Drumpf"Age:5 attitude:@"He started"
initWithName: @"President" lastName: @"Obama"Age:54 attitude: @"Awesome"
//As you can see the value can change for each instance.

আপনি যদি অন্য ভাষা থেকে আসেন তবে স্থির পদ্ধতিগুলি শ্রেণিবদ্ধের মতো same
আপনি যদি সুইফ্ট থেকে আসছেন তবে টাইপ পদ্ধতি শ্রেণিবদ্ধের মতো as


0

উপরের উত্তরে যুক্ত করা হচ্ছে

ক্লাস পদ্ধতি ক্লাসে কাজ করবে, আমরা এটিকে সাধারণ উদ্দেশ্যে ব্যবহার করব যেখানে স্ট্রিংউইথফোর্ম্যাট, শ্রেণীর আকার এবং সর্বাধিক গুরুত্বপূর্ণভাবে ডি আর ইত্যাদির জন্য use

NSString *str = [NSString stringWithFormat:@"%.02f%%",someFloat]; 

ইনস্ট্যান্স মেথড ক্লাসে নয় এমন ক্লাসের উদাহরণে কাজ করবে যেমন আমাদের দু'জন ব্যক্তি রয়েছেন এবং আমরা এখানে আলাদা আলাদাভাবে প্রতিটিটির ভারসাম্য জানতে চাই আমাদের উদাহরণ পদ্ধতিটি ব্যবহার করা দরকার। কারণ এটি সাধারণ প্রতিক্রিয়া ফিরিয়ে দেবে না। যেমন এনএসএসআরির গণনা নির্ধারণ ইত্যাদি

[johnson getAccountBalance];
[ankit getAccountBalance];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.