13
Reply

NP89 ICloneable interface

Maha

Maha

Mar 21 2008 11:31 AM
5.4k

Hi Guys

 

NP89 ICloneable interface

 

http://www.java2s.com/Code/CSharp/Language-Basics/DemonstrateICloneable.htm

 

I got following program from the above website. It demonstrates ICloneable interface.  

 

What is the purpose of defining X o = new X(x);. Because without defining   

X o = new X(x); program is producing same result. Next program demonstrates that.  

 

Anyone knows please explain the reason.

 

Thank you

 

 

using System;

class X

{

   public int a;

 

   public X(int x) { a = x; }

}

 

class Test : ICloneable

{

   public X o;

   public int b;

 

   public Test(int x, int y)

   {

      o = new X(x);

      b = y;

   }

 

   public void show(string name)

   {

      Console.Write(name + " values are ");

      Console.WriteLine("o.a: {0}, b: {1}", o.a, b);

      Console.WriteLine();

   }

 

   // Make a deep copy of the invoking object.

   public object Clone()

   {

      Test temp = new Test(o.a, b);

      return temp;

   }

}

 

public class CloneDemo

{

   public static void Main()

   {

      Test ob1 = new Test(10, 20);

 

      ob1.show("ob1");

 

      Console.WriteLine("Make ob2 a clone of ob1.");

      Test ob2 = (Test)ob1.Clone();

 

      ob2.show("ob2");

 

      Console.WriteLine("Changing ob1.o.a to 99 and ob1.b to 88.");

      ob1.o.a = 99;

      ob1.b = 88;

 

      ob1.show("ob1");

      ob2.show("ob2");

   }

}

 

 

using System;

/*

class X

{

   public int a;

 

   public X(int x) { a = x; }

}

*/

 

class Test //: ICloneable

{

   //public X o;

   public int a;

   public int b;

 

   public Test(int x, int y)

   {

      //o = new X(x);

      a = x;

      b = y;

   }

 

   public void show(string name)

   {

      Console.Write(name + " values are ");

      Console.WriteLine("a: {0}, b: {1}", a, b);

      Console.WriteLine();

   }

 

   // Make a deep copy of the invoking object.

   public object Clone()

   {

      Test temp = new Test(a, b);

      return temp;

   }

}

 

public class CloneDemo

{

   public static void Main()

   {

      Test ob1 = new Test(10, 20);

 

      ob1.show("ob1");

 

      Console.WriteLine("Make ob2 a clone of ob1.");

      Test ob2 = (Test)ob1.Clone();

 

      ob2.show("ob2");

 

      Console.WriteLine("Changing ob1.o.a to 99 and ob1.b to 88.");

      ob1.a = 99;

      ob1.b = 88;

 

      ob1.show("ob1");

      ob2.show("ob2");

   }

}


Answers (13)