ICloneable
อินเตอร์เฟซด้วยตัวเองไม่ได้เป็นประโยชน์มากซึ่งเป็นที่จะบอกว่ามีจริงๆไม่ได้หลาย ๆ สถานการณ์ที่เป็นประโยชน์ที่จะรู้ว่าวัตถุอยู่ cloneable โดยไม่ทราบว่าสิ่งอื่นใดเกี่ยวกับเรื่องนี้ นี่เป็นสถานการณ์ที่แตกต่างจากเช่นIEnumerable
หรือIDisposable
; มีหลายสถานการณ์ที่เป็นประโยชน์ในการยอมรับIEnumerable
โดยไม่รู้อะไรเลยนอกจากวิธีการแจกแจง
ในทางกลับกันICloneable
อาจมีประโยชน์เมื่อใช้เป็นข้อ จำกัด ทั่วไปร่วมกับข้อ จำกัด อื่น ๆ ตัวอย่างเช่นคลาสพื้นฐานอาจรองรับอนุพันธ์จำนวนหนึ่งอย่างมีประโยชน์ซึ่งบางส่วนสามารถโคลนได้อย่างมีประโยชน์และบางส่วนไม่สามารถโคลนได้ หากประเภทพื้นฐานนั้นเปิดเผยอินเทอร์เฟซการโคลนนิ่งสาธารณะประเภทอนุพันธ์ใด ๆ ที่ไม่สามารถโคลนได้จะละเมิดหลักการการแทนที่ของ Liskov วิธีหลีกเลี่ยงปัญหานี้คือการให้ประเภทฐานสนับสนุนการโคลนนิ่งโดยใช้วิธีการป้องกันและอนุญาตให้ประเภทที่ได้รับใช้อินเทอร์เฟซการโคลนสาธารณะตามที่เห็นสมควร
เมื่อทำได้สำเร็จวิธีการที่ต้องการยอมรับวัตถุWonderfulBase
ประเภทหนึ่งและจำเป็นต้องสามารถโคลนได้สามารถเข้ารหัสเพื่อยอมรับวัตถุ WonderfulBase ที่รองรับการโคลน (โดยใช้พารามิเตอร์ประเภททั่วไปที่มีประเภทฐานและICloneable
ข้อ จำกัด ) . แม้ว่าICloneable
อินเทอร์เฟซจะไม่ได้ระบุถึงการโคลนนิ่งแบบลึกหรือตื้น แต่เอกสารประกอบสำหรับWonderfulBase
ระบุว่าWonderfulBase
ควรโคลนแบบลึกหรือแบบตื้น โดยพื้นฐานแล้วICloneable
อินเทอร์เฟซจะไม่ประสบความสำเร็จในสิ่งที่ไม่สามารถทำได้โดยการกำหนดICloneableWonderfulBase
ยกเว้นว่าจะหลีกเลี่ยงการกำหนดชื่อที่แตกต่างกันสำหรับคลาสพื้นฐานที่สามารถโคลนได้