ICloneable
Arayüz kendisi tarafından bir nesne bu konuda başka bir şey bilmeden kopyalanabilen olduğunu bilmek yararlıdır nerede gerçekten birçok durum var olmadığını söylemek olan, çok kullanışlı değildir. Bu, örneğin IEnumerable
veya IDisposable
; IEnumerable
Nasıl numaralandırılacağından başka hiçbir şey bilmeden kabul etmenin yararlı olduğu birçok durum vardır .
Öte yandan, diğer ICloneable
kısıtlamalarla birlikte genel bir sınırlama olarak uygulandığında yararlı olabilir. Örneğin, bir temel sınıf yararlı bir şekilde bir dizi türevi destekleyebilir, bunlardan bazıları yararlı bir şekilde klonlanabilir ve bazıları olamaz. Temel türün kendisi bir genel klonlama arayüzünü açığa çıkarsa, klonlanamayan herhangi bir türev türü Liskov İkame İlkesini ihlal eder. Bu sorunu önlemenin yolu, temel tipin Korumalı bir yöntem kullanarak klonlamayı desteklemesi ve türetilmiş türlerin uygun gördükleri şekilde genel bir klonlama arabirimi uygulamasına izin vermektir.
Bu gerçekleştirildikten sonra, bir WonderfulBase
türden bir nesneyi kabul etmek isteyen ve onu klonlayabilmesi gereken bir yöntem, klonlamayı destekleyen bir WonderfulBase nesnesini kabul edecek şekilde kodlanabilir (temel tür ve ICloneable
kısıtlamalara sahip genel bir tür parametresi kullanılarak ) . Her ne kadar ICloneable
arayüz kendisi derin veya sığ klonlama işaret olmaz, belgelerine WonderfulBase
kopyalanabilen belirtmek istiyorum WonderfulBase
, derin veya sığ-klonlanmış olmalıdır. Esasen, ICloneable
arayüz, ICloneableWonderfulBase
her farklı klonlanabilir temel sınıf için farklı adlar tanımlamak zorunda kalmaması dışında, tanımlayarak başarılamayacak hiçbir şeyi başaramazdı .