Следующее надумано, но потерпите:
interface Clonable<TSubClass>
{
TSubClass Clone();
}
Как я могу ограничить TSubClass типом реализации?
т.е. пусть это сделает только разработчик:
class Dog : Clonable<Dog>
{
Dog Clone()
{
....
}
}
Не это:
class BadDog : Clonable<Rabbit>
{
Rabbit Clone()
{
....
}
}