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 |