Generic C# Copy Constructor

前端 未结 5 1389
再見小時候
再見小時候 2021-01-31 10:55

What would be the best way to write a generic copy constructor function for my c# classes? They all inherit from an abstract base class so I could use reflection to map the prop

5条回答
  •  爱一瞬间的悲伤
    2021-01-31 11:07

    A copy constructor basically means you have a single parameter, which is the object you're going to copy.

    Also, do a deep copy, not a shallow copy.

    If you don't know what deep and shallow copies are, then here's the deal:

    Suppose you're copying a class that has a single row of integers as field.

    A shallow copy would be:

    public class Myclass()
    {
        private int[] row;
        public MyClass(MyClass class)
        {
            this.row = class.row
        }
    }
    

    deep copy is:

    public class Myclass()
    {
        private int[] row;
        public MyClass(MyClass class)
        {
            for(int i = 0; i

    A deep copy really gets the actuall values and puts them in a new field of the new object, whilst a shallow copy only copies the pointers.

    With the shallow copy, if you set:

    row[3] = 5;
    

    And then print both rows, both prints will have 5 as value of the 4th number. With a deep copy however, only the first print will have this, since the rows don't have the same pointers.

提交回复
热议问题