GSI

C# Deep Copy

C# 2008. 9. 24. 20:06 |


C#을 사용하다 보면 포인터의 개념이 없기 때문에 클래스인 경우는 참조 형태로 처리가 되는거 같아요.

A 의 클래스를 a, b로 선언하고 a의 값을 b로 대입하게 되면 참조 형태가 되어서 a의 값을 바꾸게 되면
결국에 b의 값도 바뀌게 되는 경우가 있습니다.

물론 데이터형인 경우는 깊은 복사가 이루어 지지만 클래스인 경우는 일반 복사가 이루어 지는듯 합니다.
간혹 깊은 복사를 해야 할때가 오는데요..

ICloneable을 상속 받아서 처리 하면 아래와 같이 처리 하면 될듯하네요.

// 샘플 코드
    class Cell : ICloneable
    {
        string var;

        public string Var
        {
            get { return var; }
            set { var = value; }
        }

        public Cell(string var)
        {
            this.Var = var;
        }

        public object Clone()
        {
            return new Cell(this.Var);
        }
    }

    class Cells : List<Cell>, ICloneable
    {
        public Cells()
        {
        }

        public object Clone()
        {
            Cells listCell = new Cells();
            foreach (Cell c in this)
            {
                listCell.Add((Cell)c.Clone());
            }

            return listCell;
        }
    }

Posted by gsi
: