, , , . , , . , , .NET , .
abstract class AnimalBase<T> where T:AnimalBase<T>, T Clone() class Cat: AnimalBase<Cat>, var newCat = someCat.Clone(); newCat.Meow(); , var newCat = (Cat)(someCat.Clone()); newCat.Meow();. , , SiameseCat Cat, mySiameseCat.Clone(); return a SiameseCat SiameseCat AnimalBase<SiameseCat>, Cat.
, , . SiameseCat Cat IAnimal<SiameseCat>. , , , IAnimal<SiameseCat>, IAnimal<Cat> [if Cat - , ). , , .