0

I'm supposed to make my class cloneable for class, but I can't get it to work... Here's what I have so far:

public class Employeex : ICloneable
    {
        // using properties instead of the constructor
        public int EmployeeID { get; set; }
        public string Name { get; set; }
        public int CurrentLocationID { get; set; }
        public object Clone()
        {
            Employeex copy = new Employeex();
            copy.EmployeeID = this.EmployeeID.Clone();
            copy.Name = this.Name.Clone();
            copy.CurrentLocationID = this.CurrentLocationID.Clone();
            return copy;

        }

    }

And here is the code my professor gave us as a reference to use:

public class clsPendingCH : ICloneable
{
public double[] Samples;
public object Clone()
{
clsPendingCH copy = new clsPendingCH();
copy.Samples = (double[])this.Samples.Clone();
return copy;
}
}

I get an error saying 'int' does not contain a definition for 'Clone', and cannot convert type 'object' to 'string'. Anyone have any ideas?

2
Contributors
6
Replies
7
Views
7 Years
Discussion Span
Last Post by papanyquiL
1

Which code are you trying to make work -- what you have or what your professor gave you?

public sealed class Employeex : ICloneable
  {
    public int EmployeeID { get; set; }
    public string Name { get; set; }
    public int CurrentLocationID { get; set; }
    public Employeex()
    {
    }
    #region ICloneable Members
    object ICloneable.Clone()
    {
      return this.MemberwiseClone();
    }
    public Employeex Clone()
    {
      return (Employeex)((ICloneable)this).Clone();
    }
    #endregion
  }
Votes + Comments
Thanks!
0

Thanks sknake, I was trying to clone the first class that I posted. I was trying to clone each individual method 'Name, CurrentLocationID, etc..' Here's my updated code that you recommended:

public class Employeex : ICloneable
    {
        // using properties instead of the constructor
        public int EmployeeID { get; set; }
        public string Name { get; set; }
        public int CurrentLocationID { get; set; }
        public Employeex()
        {
        }
        public object Clone()
        {
            return this.MemberwiseClone();
        }
        public Employeex Clone1()
        {
            return (Employeex)((ICloneable)this).Clone();
        }

    }

I made a couple of changes, because the class can't be sealed. I've made an array containing all of the information under employeeid, name, etc, and used a foreach statement to output it onto the screen. How would I output it using the clone method?

Thanks for the help.

0

Why did you rename Clone to Clone1 and remove the explicit interface implementation? That doesn't make any sense. Control clone through the interface like I posted and call the clone method. ICloneable returns an objects but if you do it like I posted you can have a strongly typed clone while implementing ICloneable...

public class Employeex : ICloneable
  {
    public int EmployeeID { get; set; }
    public string Name { get; set; }
    public int CurrentLocationID { get; set; }
    public Employeex()
    {
    }
    #region ICloneable Members
    object ICloneable.Clone()
    {
      Employeex clone = new Employeex();
      clone.EmployeeID = this.EmployeeID;
      clone.Name = this.Name;
      clone.CurrentLocationID = this.CurrentLocationID;
      return clone;
    }
    public Employeex Clone()
    {
      return (Employeex)((ICloneable)this).Clone();
    }
    #endregion
  }

Calling it:

private void button2_Click(object sender, EventArgs e)
    {
      Employeex emp1 = new Employeex();
      emp1.EmployeeID = 50;
      emp1.Name = "emp1";
      Employeex emp2 = emp1.Clone();
      emp2.Name = "emp2";
      System.Diagnostics.Debugger.Break();
    }
0

Thanks for the help, and sorry about the confusion, the ICloneable interface is pretty confusing to me. I tried to call it, but it's giving the error 'cannot convert type object to Employeex[]. an explicit conversion exits (are you missing a cast?)' Here is my code:

public static void AnotherMethod()
        {
            Console.WriteLine(Environment.NewLine + Environment.NewLine);

            Employeex[] empArray1 = new Employeex[6];
            empArray1[0].EmployeeID = 123; empArray1[0].Name = "Fred Flinstone"; empArray1[0].CurrentLocationID = 1;
            Employeex[] empArray2 = empArray1.Clone();
            empArray1[1].EmployeeID = 124; empArray1[1].Name = "Barney Rubble"; empArray1[1].CurrentLocationID = 1;

            foreach (Employeex e in EmployeeArray)
                Console.WriteLine("Next employee pulled: " + e.Name);


        }
0

I don't see what clone has to do with this, but:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace daniweb
{
  public class Employeex : ICloneable
  {
    public int EmployeeID { get; set; }
    public string Name { get; set; }
    public int CurrentLocationID { get; set; }
    public Employeex()
    {
    }
    public Employeex(string Name, int EmployeeId, int CurrentLocationID)
      : base()
    {
      this.Name = Name;
      this.EmployeeID = EmployeeID;
      this.CurrentLocationID = CurrentLocationID;
    }
    #region ICloneable Members
    object ICloneable.Clone()
    {
      Employeex clone = new Employeex();
      clone.EmployeeID = this.EmployeeID;
      clone.Name = this.Name;
      clone.CurrentLocationID = this.CurrentLocationID;
      return clone;
    }
    public Employeex Clone()
    {
      return (Employeex)((ICloneable)this).Clone();
    }
    #endregion
    public string GetEmployeeInformation()
    {
      StringBuilder sb = new StringBuilder();
      sb.AppendLine(string.Format("Employee: {0}", this.Name));
      sb.AppendLine(string.Format("ID: {0:F0}", this.EmployeeID));
      sb.Append(string.Format("Location: {0:F0}", this.CurrentLocationID));
      return sb.ToString();
    }
  }
}

Calling it:

private void button2_Click(object sender, EventArgs e)
    {
      List<Employeex> lst = new List<Employeex>();
      lst.Add(new Employeex("Scott", 1, 5));
      lst.Add(new Employeex("Dan", 2, 5));
      lst.Add(new Employeex("Ken", 3, 5));
      lst.Add(new Employeex("Kevin", 4, 6));
      foreach (Employeex emp in lst)
      {
        Console.WriteLine(emp.GetEmployeeInformation());
      }
    }
This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.