class Base{ public virtual Base Create(); } class Base<T>:Base where T:Base<T>, new(){ public override Base Create(){ return (Base)(new T()); } public T Create(){return new T();} } こんな方法もあるかも。未テストかつ変態的なので動くか不明。
なお、使う時は class B:Base<B>{ ... } class C:Base<B>{ ... } みたいにする。