Copy constructor in polymorphism in C# -


please first take @ simple code;

this base class:

public class baseclass {     public baseclass()     {     }      public baseclass(baseclass b)     {     }      public virtual string getmsg()     {         return "base";     } } 

and derived one:

public class drivenclass : baseclass {     public string msg { get; set; }      public drivenclass(string msg)     {         msg = msg;     }      public drivenclass(drivenclass d)     {         msg = d.msg;     }      public override string getmsg()     {         return  msg;     } } 

and test:

public partial class form1 : form {     public form1()     {         initializecomponent();     }      public baseclass b { get; set; }     public drivenclass d { get; set; }      private void button1_click(object sender, eventargs e)     {         d = new drivenclass("driven");         b = new baseclass(d);         messagebox.show("b:" + b.getmsg() + "\nd:" + d.getmsg());     } } 

now question should b = new baseclass(d); works b = new drivenclass(d); ?

i'm using in polymorphism , use 1 copy-constructor instead of different driven ones.

i want output :

driven driven 

but it's :

base driven 

you can use overridden virtual copy method instead of copy constructor.

public class baseclass {     public baseclass()     {     }      public virtual baseclass shallowcopy()     {         return new baseclass();     }      public virtual string getmsg()     {         return "base";     } }  public class drivenclass : baseclass {     public string msg { get; set; }      public drivenclass(string msg)     {         msg = msg;     }      public override baseclass shallowcopy() {         return new drivenclass(this.msg);     }      public override string getmsg()     {         return  msg;     } } 

then call this:

d = new drivenclass("driven"); b = d.shallowcopy(); 

this work because calling virtual method calls actual overriden implementation in subclass, when called baseclass interface.


Comments

Popular posts from this blog

How to access named pipes using JavaScript in Firefox add-on? -

multithreading - OPAL (Open Phone Abstraction Library) Transport not terminated when reattaching thread? -

node.js - req param returns an empty array -