I can think of two ways to solve this problem. One uses generics, and the other just requires an abstract method. Simple at first.
public abstract class A { public void f() { A bOrC = newInstance(); } public abstract void f2(); protected abstract A newInstance(); } public class B : A { public override void f2(){} public override A newInstance(){ return new B(); } } public class C : A { public override void f2(){} public override A newInstance(){ return new C(); } }
And now with generics
public abstract class A<T> where T : A, new() { public void f() { A bOrC = new T(); } public abstract void f2(); } public class B : A<B> { public override void f2(){} } public class C : A<C> { public override void f2(){} }
unholysampler
source share