September 2, 2004
Create a new object in the base class with the correct derived class
Sometimes you want a base class that implements an “Clone” method. No you only want to write an Copy-Constructor for each derived class, you do NOT want to write an new virtual/override Clone method.
The easiest way to archive this is the following:
using System; namespace Test { class Class1 { static void Main(string[] args) { A a = new A(); A a1 = a.Clone(); // we created a A-instance! B b = new B(); A b1 = b.Clone(); // we created a B-instance! C c = new C(); A c1 = c.Clone(); // we created a C-instance! D d = new D(); A d1 = d.Clone(); // we created a D-instance! } } class A { public A() {} public A(A val) {} // copy constructor public A Clone() { System.Type t = this.GetType(); object [] args = new object[ 1 ] {this}; object newobj = System.Activator.CreateInstance(t, args); return (A) newobj; } } class B : A { public B() {} public B(B val) : base(val) {} // copy constructor } class C : A { public C() {} public C(C val) : base(val) {} // copy constructor } class D : C { public D() {} public D(D val) : base(val) {} // copy constructor }
}
Posted 3 years, 5 months ago on September 2, 2004
The trackback url for this post is http://blog.kalmbachnet.de/bblog/trackback.php/10/
The trackback url for this post is http://blog.kalmbachnet.de/bblog/trackback.php/10/
Comments have now been turned off for this post