আমি সি # তে আইক্লোনেবল বাস্তবায়ন করব কেন?


110

আপনি আমাকে ব্যাখ্যা করতে পারেন কেন আমাকে উত্তরাধিকার সূত্রে ICloneableএই Clone()পদ্ধতিটি প্রয়োগ করা উচিত ?

আমি যদি একটি গভীর অনুলিপি করতে চাই, আমি কি কেবল আমার পদ্ধতিটি বাস্তবায়ন করতে পারি না? বলি MyClone()?

আমার উত্তরাধিকারী হবে কেন ICloneable? সুবিধা কি? এটা কি কোডকে "আরও পঠনযোগ্য" বানানোর বিষয়?


উত্তর:


117

আপনার করা উচিত নয়। মাইক্রোসফ্ট প্রয়োগের বিরুদ্ধে সুপারিশ করেছে ICloneableকারণ আপনার Cloneপদ্ধতিটি "গভীর" বা "অগভীর" ক্লোনটি সম্পাদন করে কিনা ইন্টারফেস থেকে সুস্পষ্ট ইঙ্গিত পাওয়া যায় না ।

আরও তথ্যের জন্য 2003 (!) এ ব্র্যাড আব্রামগুলি থেকে এই ব্লগ পোস্টটি দেখুন ।


4
নিবন্ধটি Wayback লিংক, যা এখন 404 হল: web.archive.org/web/20040419170407/http://blogs.msdn.com/brada/...
Harpo


29

ICloneableইন্টারফেস নিজে যা বলতে চাই যে সত্যিই অনেক পরিস্থিতিতে নয় যেখানে এটি জানাতে চাই যে, একটি বস্তুর এটি সম্পর্কে অন্য কিছু না জেনেই cloneable হয় দরকারী হয় খুব দরকারী নয়। উদাহরণস্বরূপ থেকে এটি একেবারেই আলাদা পরিস্থিতি IEnumerableবা IDisposable; এমন অনেকগুলি পরিস্থিতি রয়েছে যেখানে এটি IEnumerableগণনা করা ছাড়া অন্য কিছু না জেনে কোনও গ্রহণ করা কার্যকর।

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

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


18

ICloneableছাত্রলীগের সেই সব শিল্পকর্মগুলির মধ্যে একটি যা বিতর্কিত হয়েছিল। এটি বাস্তবায়নের কোনও বাস্তব কারণ আইএমএইচও নেই। এর সাথে আমি বললাম যে আমি যদি ক্লোন পদ্ধতি তৈরি করতে যাচ্ছি তবে আমি বাস্তবায়ন ICloneableকরব এবং এর নিজস্ব শক্তিশালী টাইপিত সংস্করণ সরবরাহ করব Clone

সমস্যাটি ICloneableহ'ল এটি কখনই Cloneঅগভীর বা গভীর অনুলিপি ছিল যা খুব আলাদা জিনিস indicated আসলে কোন নেই ICloneable<T>ICloneable সম্পর্কে মাইক্রোসফট চিন্তা উপর একটি ইঙ্গিত হতে পারে


9

ম্যাট সঠিক, এটি ব্যবহার করবেন না। আপনার নিজস্ব Copy()পদ্ধতি (বা অনুরূপ নাম) তৈরি করুন এবং আপনার পাবলিক API এ এটি পুরোপুরি পরিষ্কার করুন আপনার পদ্ধতিটি আপনার অবজেক্টের গভীর বা অগভীর অনুলিপি তৈরি করছে কিনা।

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