본문 바로가기

worklog/C#

Call by Reference (param, ref, out)

Call by Reference (params, ref, out)


params

 params 키워드를 사용하면 가변 개수의 인수를 사용하는 메소드 매개 변수를 지정할 수 있다.

 그리고 인수를 보내지 않아도 된다. 인수를 보내지 않는 경우 params의 길이가 0이다.

using System;

namespace Petzold
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = { 22, 33, 55, 100, 10, 2 };
            //222
            Console.WriteLine(AddUpArray(arr));
            //222
            Console.WriteLine(AddUpArray(22, 33, 55, 100, 10, 2));
            //0
            Console.WriteLine(AddUpArray());
        }
        static int AddUpArray(params int[] arr)
        {
            int sum = 0;

            foreach (int i in arr)
                sum += i;

            return sum;
        }
    }
}


ref / out 

 일반 매개변수는 Call by value 방식

 ref / out 키워드를 사용하는 매개변수는 Call by reference 방식으로 동작

    • ref : 할당된 변수를 사용해야함.
    • out :  할당되지 않은 변수를 사용해도 됨.  
              호출한 함수안에서 out 키워드를 사용하는 매개변수에 값이 할당되어야 함. 
              할당 안되면 컴파일 에러 발생.

class PassByValue

{ static void Main() { int i = 22;

AlterInteger(ref i); Console.WriteLine(i); //22 } static void AlterInteger(int i) { i = 55; } }

class PassByReference

{ static void Main() { int i = 22; // 초기화하지 않으면 에러

AlterInteger(ref i); Console.WriteLine(i); //55 } static void AlterInteger(ref int i) { i = 55; } }

class PassByReference { static void Main() { int i; // 초기화하지 않아도 됨 AlterInteger(out i); Console.WriteLine(i); //55 } static void AlterInteger(out int i) { i = 55; //만약 out 키워드를 사용하는 파라미터에 데이터가 할당되지 않으면 에러 발생 } }

 

 



'worklog > C#' 카테고리의 다른 글

Thread  (0) 2018.08.25
C# 버전 별 추가된 기능  (0) 2018.08.19
Environment 클래스  (0) 2018.06.30
What the C or C++ Programmer Needs to Know About C# and the .NET Framework  (0) 2018.06.30
C# 웹 컴파일러  (0) 2018.06.30