[C#] C #에서 값에 의한 참조 형식 전달


Answers

이미 설명했듯이 C ++의 복사 생성자에는 해당하지 않습니다.

또 다른 기술은 객체가 불변 인 디자인을 사용하는 것입니다. 변경 불가능한 객체의 경우 참조와 사본을 전달할 때 (의미 적) 차이가 없습니다. 이것이 System.String이 설계된 방식입니다. 다른 시스템 (특히 함수 언어)은이 기술을 훨씬 더 많이 적용합니다.

Question

값으로 참조 형식을 C #의 메서드에 전달하고 싶습니다. 그것을 할 수있는 방법이 있습니까?

C ++에서는 Value로 전달하려는 경우 항상 복사 생성자를 사용하여 재생할 수 있습니다. C #에서 어떤 방법 으로든 예외가 있습니다 : 1. 명시 적으로 새 객체 만들기 2. IClonable을 구현 한 다음 Clone 메서드를 호출합니다.

여기에 작은 예가 있습니다.

복사 생성자를 구현하는 C ++ 클래스 A를 생각해 보겠습니다.

func1 (Class a) 메서드는 func1 (objA) (자동으로 복사본 만들기)이라고 말하면됩니다.

C #에서 이와 비슷한 것이 있습니까? 그건 그렇고, Visual Studio 2005를 사용하고 있습니다.




이 링크 (이미 게시 됨)에 따르면 : http://msdn.microsoft.com/en-us/library/s6938f28(VS.80).aspx

참조 유형을 값으로 전달하는 방법은 아래와 같습니다. 참조 유형 arr은 값에 의해 Change 메소드에 전달됩니다.

배열에 새로운 메모리 위치가 지정되어 있지 않으면 변경 사항이 원래의 항목에 영향을 미치며이 경우 변경은 메소드에 대해 완전히 로컬입니다.

class PassingRefByVal 
{
    static void Change(int[] pArray)
    {
        pArray[0] = 888;  // This change affects the original element.
        pArray = new int[5] {-3, -1, -2, -3, -4};   // This change is local.
        System.Console.WriteLine("Inside the method, the first element is: {0}", pArray[0]);
    }

    static void Main() 
    {
        int[] arr = {1, 4, 5};
        System.Console.WriteLine("Inside Main, before calling the method, the first element is: {0}", arr [0]);

        Change(arr);
        System.Console.WriteLine("Inside Main, after calling the method, the first element is: {0}", arr [0]);
    }
}

결론적으로 깊이있는 토론을 원하면이 질문에서 Jon Skeet의 게시물을 참조하십시오.

C #에서 참조 또는 값으로 개체 전달