ICloneable
इंटरफ़ेस अपने आप में जो कहना है कि वहाँ वास्तव में कई स्थितियों नहीं हैं, जहां यह पता चला है कि एक वस्तु इसके बारे में कुछ और जानने के बिना cloneable है उपयोगी है बहुत उपयोगी नहीं है,। यह उदाहरण IEnumerable
या IDisposable
; ऐसी कई स्थितियाँ हैं, जहाँ इसे स्वीकार करने के IEnumerable
अलावा और कुछ जाने बिना स्वीकार करना उपयोगी है।
दूसरी ओर, अन्य ICloneable
बाधाओं के साथ एक सामान्य बाधा के रूप में लागू होने पर उपयोगी हो सकता है। उदाहरण के लिए, एक बेस क्लास उपयोगी रूप से कई डेरिवेटिव्स का समर्थन कर सकता है, जिनमें से कुछ को उपयोगी रूप से क्लोन किया जा सकता है, और जिनमें से कुछ नहीं हो सकता है। यदि आधार प्रकार स्वयं एक सार्वजनिक क्लोनिंग इंटरफ़ेस को उजागर करता है, तो किसी भी व्युत्पन्न प्रकार को क्लोन नहीं किया जा सकता है जो लिस्कोव प्रतिस्थापन सिद्धांत का उल्लंघन करेगा। इस समस्या से बचने का तरीका एक संरक्षित पद्धति का उपयोग करके आधार प्रकार का समर्थन क्लोनिंग है, और एक सार्वजनिक क्लोनिंग इंटरफ़ेस को लागू करने के लिए व्युत्पन्न प्रकारों को अनुमति देता है, जैसा कि वे फिट देखते हैं।
एक बार जो पूरा हो गया, एक विधि जो किसी WonderfulBase
प्रकार की वस्तु को स्वीकार करना चाहती है , और इसे क्लोन करने में सक्षम होने के लिए, एक WonderfulBase ऑब्जेक्ट को स्वीकार करने के लिए कोडित किया जा सकता है जो क्लोनिंग का समर्थन करता है (बेस-प्रकार और ICloneable
बाधाओं के साथ एक सामान्य प्रकार के पैरामीटर का उपयोग करके ) । हालाँकि ICloneable
इंटरफ़ेस स्वयं को गहरे या उथले क्लोनिंग का संकेत नहीं देगा, लेकिन प्रलेखन WonderfulBase
यह संकेत देगा कि क्लोन करने योग्य गहरा WonderfulBase
होना चाहिए या उथला-क्लोन किया गया है। अनिवार्य रूप से, ICloneable
इंटरफ़ेस कुछ भी पूरा नहीं करेगा जिसे परिभाषित करके पूरा नहीं किया जाएगा ICloneableWonderfulBase
, सिवाय इसके कि यह हर अलग-अलग क्लोन बेस क्लास के लिए अलग-अलग नामों को परिभाषित करने से बचाएगा।