C#, 명명된 인수 및 선택적 인수
명명된 인수
매개변수 목록에서의 매개변수 위치지정 대신 매개변수의 이름과 인수를 연결하여 특정 매개변수에 대한 인수를 지정할 수 있으므로 매개변수의 순서를 기억하거나 확인할 필요가 없다.
메소드에서 파라미터 값을 넘길 때 매개변수 이름을 정해서 넘기는 방법을 제공한다.
using System;
namespace Test
{
class Tester
{
static void Main(string[] args)
{
Console.WriteLine(Sum(j : 1, i : 2));
SayHello(age : 20, name : "OJC");
}
static int Sum(int i, int j)
{
Console.WriteLine("i={0}, j={1}", i, j);
return i + j;
}
static void SayHello(string name, int age)
{
Console.WriteLine("안녕, name = {0}, age = {1}", name, age);
}
}
}
선택적 인수
메소드, 생성자, 인덱서 또는 대리자의 정의에서 해당 매개변수가 필수인지 선택적인지 지정할 수 있는데, 호출할 경우 모든 필수 매개변수에 대한 인수는 항상 제공해야 하지만 선택적 매개변수에 대한 인수는 생략할 수 있다. 각각의 선택적 매개변수에는 기본값이 있으며 해당 매개변수에 대해 인수를 전달하지 않으면 기본값이 사용된다.
using System;
namespace Test
{
class Tester
{
private int m = 88, n = 99;
//Tester(){
// this.m = 0; this.n = 0;
//}
//위 기본생성자의 의미를 포함하고 있다.
Tester(int m = 0, int n = 0)
{
this.m = m; this.n = n;
}
//선택적 매개변수
static int Sum(int i = 0, int j = 0) // i, j 매개변수없이 호출되면 I,j에 0이 대입
{
return i + j;
}
static void Main(string[] args)
{
Console.WriteLine(Sum(1, 2));
Console.WriteLine(Sum(j:7));
Console.WriteLine(Sum());
Tester t1 = new Tester();
Console.WriteLine("m={0}, n={1}", t1.m, t1.n);
Tester t2 = new Tester(1, 2);
Console.WriteLine("m={0}, n={1}", t2.m, t2.n);
}
}
}
using System;
namespace Test
{
class Tester
{
static void Main(string[] args)
{
Console.WriteLine(Minus(1, 2)); //i=1, j=2
Console.WriteLine(Minus (1)); //i=1, j=0
Console.WriteLine(Minus (i : 8, j : 9)); //i=8, j=9
Console.WriteLine(Minus (j : 8, i : 9)); //i=9, j=8
Console.WriteLine(Minus ()); //i=0, j=0
}
static int Minus(int i = 0, int j = 0) // i, j 매개변수없이호출되면 0이 대입됨
{
return i - j;
}
}
}