static void Func()
{
}
//반환형 하나만 다른건 안된다.
//static int Func()
//{
//
//}
static void Func(int damage)
{
//순수하게 데미지만 입음.
}
static void Func(int damage, int type)
{
//데미지를 받으면서 type 상태이상 걸림.
}
static void TestFunc(double d, double d2 = 5.0)
{
}
위 처럼 함수 매개변수에 기본 값을 줄 수 있다.
하지만, 기본 매개변수는 맨 뒤부터 채워야함.
값을 안넣으면 넣게 되는 값을 쓰게 되고 넣으면 넣게 되는 값을 쓴다.
매개변수 사용 시, 원본 값이 아니라 복사한 값을 사용
C#에서는 기본적으로 Call by Value를 사용한다.
static void TestRef(ref int num)
{
num++;
}
int i = 10;
Console.WriteLine(i);
TestRef(ref i);
위 처럼 ref를 자료형 앞에 붙여서 사용가능.
ref로 불러온 값은 원본 값에 영향을 준다.
static void TestOut(out int num)
{
num = 2;
}
int j;
TestOut(out j);
Console.WriteLine(j);
위 처럼 j 값을 out으로 수정할 수 있다.
static void TestIn(in int num)
{
Console.WriteLine(num);
}
TestIn(in j);
이 메모리 칸에 값을 넣어주지 않았다.는 의미
null은 기본적으로 참조타입에만 가능.
p.hp 에서 . 은 (멤버) 접근 연산자.
if (p != null)
{
null인지 아닌지 체크.
}
//?? 앞이 null이면 뒤에 값으로 대신함.
string name = null;
string name2 = name ?? "이름";
name = name ?? "별명";
name ??= "별명";
// int일수도 있고 null일 수도 있다.
int? a = null;
p?.hp = 1;
null인지 아닌지 체크할 경우가 많다.
예시 )
1. 뱀서류 게임 제작중.
가장 가까운 적을 target 변수에 저장해 두었음.
target을 향해 투사체 발사
target이 사망. 현재 타켓은 null
이 상태에서 target의 위치로 투사체 발사 함수 실행
target.position을 찾으려고함. -> null reference 발생