namespace Week_3
{
// 델리게이트 기입, 이후 3가지 정보 필요
// 반환 , 델리게이트명, 매개변수(인자) 형태
delegate void MyDel();
// 이제 MyDel 로 만든 객체는 함수 중에서, 반환은 없고, 매개변수는 없는 함수를 기억할 수 있음
delegate int myDel2();
// MyDel2 만든 객체는 반환은 int 형이고, 매개변수는 없는 함수를 기억할 수 있음
class TempClass
{
public void PrintTemp()
{
Console.WriteLine("매개변수도 없고, 반환도 없는 메서드");
}
}
internal class Program
{
static void StaticMethod() //정적 메서드, 즉 공간이 잡혀있는 객체 없이도 쓸수 있는 메서드
{
Console.WriteLine("정적 메서드");
}
void nonStaticMethod()
{
Console.WriteLine("비정적 객체들이 new 할당을 통해 만들어진 객체들만 사용 가능한 메서드");
}
static void Main(string[] args)
{
// int 는 정수형을 담을 수 있음
// float 는 실수형을 담을 수 있음
// 어떤 자료형에는 함수/메서드를 담을 수 있음
// 보통의 데이터를 담고 있는 것과는 달리,
// 특별히 메서드/함수를 담을수 있는 자료형을 Delegate 라고 부른다
int a = 12;
MyDel dele = null;
// 델리게이트는 참조형이라서 null 기억 가능. 함수의 주소를 기억함
TempClass player = new TempClass(); // 객체 생성
player.PrintTemp();
dele = player.PrintTemp; // 소괄호를 뺀 함수명을 기입
// dele = new MyDel(player.PrintTemp); 위와 같은 뜻
// 이제부터 dele 는 player 라는 객체의 PrintTemp 메서드를 기억
MyDel mydel = player.PrintTemp; // 담을 때는 소괄호 빼고, 객체 + 함수 명을 기억
// "객체"의 메서드가 담겼음
// 함수/메서드 를 수행하기 위해서는 실제 메모리가 존재하는 대상만 사용 가능
mydel = StaticMethod; // 정적 메서드라 담을수 있음
mydel = nonStaticMethod; // 객체가 존재해야함
mydel(); // 사용할 때 인자값 (매개변수) 주는 형식
}
}
}
Debugging Life