The ICloneableantarmuka dengan sendirinya tidak sangat berguna, yang mengatakan bahwa ada benar-benar tidak banyak situasi di mana itu berguna untuk mengetahui bahwa suatu objek cloneable tanpa mengetahui apa-apa lagi tentang hal itu. Ini adalah situasi yang sangat berbeda dari misalnya IEnumerableatau IDisposable; Ada banyak situasi di mana itu berguna untuk menerima IEnumerabletanpa mengetahui apa pun selain bagaimana menghitungnya.
Di sisi lain, ICloneablemungkin berguna bila diterapkan sebagai batasan umum bersama dengan batasan lainnya. Misalnya, kelas dasar mungkin berguna untuk mendukung sejumlah turunan, beberapa di antaranya dapat dikloning, dan beberapa di antaranya tidak dapat. Jika tipe dasar itu sendiri mengekspos antarmuka kloning publik, maka tipe turunan apa pun yang tidak dapat dikloning akan melanggar Prinsip Substitusi Liskov. Cara untuk menghindari masalah ini adalah memiliki kloning dukungan tipe dasar menggunakan metode Terlindungi, dan mengizinkan tipe turunan untuk mengimplementasikan antarmuka kloning publik sesuai keinginan mereka.
Setelah itu selesai, metode yang ingin menerima objek dari suatu WonderfulBasetipe, dan perlu untuk dapat mengkloningnya, dapat dikodekan untuk menerima objek WonderfulBase yang mendukung kloning (menggunakan parameter tipe generik dengan tipe dasar dan ICloneablebatasan) . Meskipun ICloneableantarmuka itu sendiri tidak menunjukkan kloning dalam atau dangkal, dokumentasi untuk WonderfulBaseakan menunjukkan apakah kloning WonderfulBaseharus dalam atau dangkal. Pada dasarnya, ICloneableantarmuka tidak akan mencapai apa pun yang tidak akan dicapai dengan mendefinisikan ICloneableWonderfulBase, kecuali itu akan menghindari keharusan untuk menentukan nama yang berbeda untuk setiap kelas dasar yang dapat digandakan.