উদ্দেশ্য-সিতে বিভাগগুলি ব্যবহার করে ওভাররাইডিং পদ্ধতি


87

ইতিমধ্যে একটি বিভাগ ব্যবহার করে প্রয়োগ করা পদ্ধতিটি ওভাররাইড করতে আমি কি শ্রেণি বিভাগ ব্যবহার করতে পারি? এটার মত:

1) মূল পদ্ধতি

-(BOOL) method {
  return true;
}

2) ওভাররাইড পদ্ধতি

-(BOOL) method {
  NSLog(@"error?"); 
  return true; 
}

এই কাজ করবে, না এটি অবৈধ?

উত্তর:


147

অ্যাপল ডকুমেন্টেশন থেকে :

যদিও অবজেক্টিভ-সি ভাষা বর্তমানে ক্লাসের উত্তরাধিকার সূত্রে প্রাপ্ত পদ্ধতিগুলিকে ও শ্রেণিক ইন্টারফেসে ঘোষিত পদ্ধতিগুলিকে ওভাররাইড করার জন্য আপনাকে কোনও বিভাগ ব্যবহার করার অনুমতি দেয় , আপনি তা করতে দৃ from়ভাবে নিরুৎসাহিত হন । একটি বিভাগ একটি সাবক্লাসের বিকল্প নয়। পদ্ধতিগুলি ওভাররাইড করতে একটি বিভাগ ব্যবহার করার জন্য বেশ কয়েকটি উল্লেখযোগ্য ত্রুটি রয়েছে:

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

  • একটি বিভাগ একই শ্রেণীর অন্য বিভাগে ঘোষিত পদ্ধতিগুলি নির্ভরযোগ্যভাবে ওভাররাইড করতে পারে না।

    এই সমস্যাটি বিশেষ তাত্পর্যপূর্ণ কারণ অনেকগুলি কোকো শ্রেণি বিভাগ ব্যবহার করে প্রয়োগ করা হয়। একটি কাঠামো-সংজ্ঞায়িত পদ্ধতি যা আপনি ওভাররাইড করার চেষ্টা করছেন তা নিজেই কোনও বিভাগে প্রয়োগ করা যেতে পারে এবং যার ফলে প্রয়োগটি অগ্রাধিকার গ্রহণ করে তা সংজ্ঞায়িত হয় না।

  • কিছু বিভাগের পদ্ধতিগুলির উপস্থিতি সমস্ত ফ্রেমওয়ার্কগুলিতে আচরণের পরিবর্তনের কারণ হতে পারে। উদাহরণস্বরূপ, আপনি যদি windowWillClose:এনএসবজেক্টের কোনও বিভাগে প্রতিনিধি পদ্ধতিটি ওভাররাইড করেন তবে আপনার প্রোগ্রামের সমস্ত উইন্ডো প্রতিনিধিগণ বিভাগের পদ্ধতিটি ব্যবহার করে প্রতিক্রিয়া জানান; আপনার এনএস উইন্ডোর সমস্ত দৃষ্টান্তের আচরণ পরিবর্তন হতে পারে। ফ্রেমওয়ার্ক ক্লাসে আপনি যুক্ত বিভাগগুলি আচরণে রহস্যজনক পরিবর্তন ঘটাতে পারে এবং ক্রাশ হতে পারে to


আপনাকে ধন্যবাদ তবে আমি এটি ইতিমধ্যে জানি। আমি কেবল আশ্চর্য হই যে আমার মামলা আইনী বা না। আমার মামলা নথি থেকে কিছুটা আলাদা। :)
রিটিক্স

এটা আলাদা কেন? ডক বলেছেন যে আইনী যদি মূল পদ্ধতিটি কোনও বিভাগে না থাকে তবে দৃ strongly়ভাবে নিরুৎসাহিত হন। তারপরে আপনি এটি করতে পারেন ...
বেনোট

4
পরামর্শের জন্য আপনাকে ধন্যবাদ. আমি এই ভাষায় দরিদ্র। আমি আপনার কাছ থেকে নতুন তথ্য পেয়েছি।
পুনর্নির্মাণ করুন

4
সুপার ক্লাসের বিভাগে ঘোষিত ও প্রয়োগ করা বিভাগ পদ্ধতিতে ওভাররাইড করা কি সঠিক?
বার্গপি

4
লিঙ্কটি নষ্ট হয়ে গেছে, এটি কি নতুন সংস্করণ? বিকাশকারী.অ্যাপল.
com


9

পুরানো ডকুমেন্টেশনের লিঙ্কটি মারা গেছে; আমি খুঁজে পেতে পারি সেরা প্রতিস্থাপনটি এখানে ছিল: অ্যাপল ডক্স :

বিভাগ পদ্ধতির নাম সংঘর্ষ এড়িয়ে চলুন

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

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

এটি একটি হালকা স্পর্শ ব্যবহার করে অ্যাপল, তবে মূল বিষয়টি হ'ল: আপনি বিপর্যয়কে আমন্ত্রণ জানান, কারণ অনির্দেশ্য আচরণটি নীরব।


2

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

এই টিউটোরিয়াল থেকে, http://rypress.com / টিউটোরিয়ালস / উদ্দেশ্যমূলক / সি / বিভাগসমূহ

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