Я читал немецкую статью в Википедии о шаблоне прототипа. В разделе примера содержалась общая реализация С#, используя следующее:
abstract class Prototype<T> where T : Prototype<T> { ... }
...
class ConcretePrototype : Prototype<ConcretePrototype> { ... }
Как это работает? Как вы можете ограничить T одним и тем же общим классом? Как вы можете использовать класс для получения общего типа, используя его?
Я не программирую С#, но это кажется интересным.
Источник: Прототип шаблона