ICloneable
ইন্টারফেস নিজে যা বলতে চাই যে সত্যিই অনেক পরিস্থিতিতে নয় যেখানে এটি জানাতে চাই যে, একটি বস্তুর এটি সম্পর্কে অন্য কিছু না জেনেই cloneable হয় দরকারী হয় খুব দরকারী নয়। উদাহরণস্বরূপ থেকে এটি একেবারেই আলাদা পরিস্থিতি IEnumerable
বা IDisposable
; এমন অনেকগুলি পরিস্থিতি রয়েছে যেখানে এটি IEnumerable
গণনা করা ছাড়া অন্য কিছু না জেনে কোনও গ্রহণ করা কার্যকর।
অন্যদিকে, অন্যান্য ICloneable
সীমাবদ্ধতার পাশাপাশি জেনেরিক সীমাবদ্ধতা হিসাবে প্রয়োগ করা কার্যকর হতে পারে। উদাহরণস্বরূপ, একটি বেস শ্রেণিটি বেশ কয়েকটি ডেরিভেটিভকে কার্যকরভাবে সমর্থন করতে পারে, যার মধ্যে কিছুগুলি কার্যকরভাবে ক্লোন করা যেতে পারে, এবং এর মধ্যে কিছু নাও পারে। যদি বেস টাইপটি নিজেই একটি সার্বজনীন ক্লোনিং ইন্টারফেস প্রকাশ করে, তবে ক্লোন করা যায়নি এমন কোনও ডেরাইভেটিভ টাইপ লিসকভ সাবস্টিটিউশন নীতি লঙ্ঘন করবে। এই সমস্যাটি এড়ানোর উপায় হ'ল সুরক্ষিত পদ্ধতি ব্যবহার করে বেস টাইপ সাপোর্ট ক্লোনিং করা এবং উত্পন্ন ধরণগুলি উপযুক্ত হিসাবে তারা পাবলিক ক্লোনিং ইন্টারফেসটি প্রয়োগ করার অনুমতি দেয়।
একবার এটি সম্পন্ন হওয়ার পরে, এমন একটি পদ্ধতি যা কোনও WonderfulBase
ধরণের একটি অবজেক্ট গ্রহণ করতে চায় এবং এটি ক্লোন করতে সক্ষম হয়, একটি ওয়ান্ডারফুলবেস অবজেক্ট গ্রহণ করতে কোড করা যেতে পারে যা ক্লোনিং সমর্থন করে (বেস-টাইপ এবং ICloneable
সীমাবদ্ধতার সাথে জেনেরিক ধরণের প্যারামিটার ব্যবহার করে ) । যদিও ICloneable
ইন্টারফেসটি নিজেই গভীর বা অগভীর ক্লোনিং WonderfulBase
নির্দেশ করে না , এর জন্য ডকুমেন্টেশনটি নির্দেশ করবে যে ক্লোনযোগ্য WonderfulBase
গভীর বা অগভীর-ক্লোন হওয়া উচিত। মূলত, ICloneable
ইন্টারফেসটি এমন কোনও কিছু সম্পাদন করতে পারে না যা সংজ্ঞায়িত করে সম্পন্ন হয় না ICloneableWonderfulBase
, ব্যতীত এটি প্রতিটি পৃথক ক্লোনযোগ্য বেস শ্রেণীর জন্য আলাদা আলাদা আলাদা আলাদা নাম সংজ্ঞায়িত করা এড়াতে পারে।