các ICloneablegiao diện của bản thân không phải là rất hữu ích, mà là để nói rằng có thực sự không có nhiều tình huống mà nó là hữu ích để biết rằng một đối tượng là cloneable mà không biết bất cứ điều gì khác về nó. Đây là một tình huống rất khác với ví dụ IEnumerablehoặc IDisposable; Có rất nhiều tình huống hữu ích khi chấp nhận một IEnumerablemà không biết bất cứ điều gì khác ngoài cách liệt kê nó.
Mặt khác, ICloneablecó thể hữu ích khi được áp dụng như một ràng buộc chung cùng với các ràng buộc khác. Ví dụ, một lớp cơ sở có thể hỗ trợ một cách hữu ích một số dẫn xuất, một số trong số đó có thể được sao chép một cách hữu ích và một số thì không. Nếu bản thân kiểu cơ sở lộ ra giao diện sao chép công khai, thì bất kỳ kiểu phái sinh nào không thể được sao chép sẽ vi phạm Nguyên tắc thay thế Liskov. Cách để tránh vấn đề này là để kiểu cơ sở hỗ trợ sao chép bằng phương pháp được Bảo vệ và cho phép các kiểu dẫn xuất triển khai giao diện nhân bản công khai khi chúng thấy phù hợp.
Khi điều đó đã được hoàn thành, một phương thức muốn chấp nhận một đối tượng của một WonderfulBasekiểu và cần có khả năng sao chép nó, có thể được mã hóa để chấp nhận một đối tượng WonderfulBase hỗ trợ sao chép (sử dụng một tham số kiểu chung với kiểu cơ sở và các ICloneableràng buộc) . Mặc dù ICloneablebản thân giao diện sẽ không chỉ ra nhân bản sâu hay nông, nhưng tài liệu về WonderfulBasesẽ cho biết liệu có WonderfulBasethể nhân bản nên được nhân bản sâu hay nông. Về cơ bản, ICloneablegiao diện sẽ không thực hiện được bất kỳ điều gì không thể hoàn thành bằng cách xác định ICloneableWonderfulBase, ngoại trừ việc nó sẽ tránh phải xác định các tên khác nhau cho mọi lớp cơ sở có thể nhân bản khác nhau.