C#프로그래밍
27일 복습
노재두내
2023. 7. 27. 22:23
대리자 연습( 주석 순서 기억하기)
1.메서드 정의
2. 대리자 형식 정의
3. 대리자 인스턴스 생성 및 메서드 연결
4. 대리자 호출
대리자는 연결하고자하는 메서드와 매개변수와 반환 형식이 같아야한다, delegate를 사용
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
public class App
{
//2. 대리자 형식 정의
delegate void MyDelegate();
public App()
{
//3.대리자 인스턴스 생성 및 메서드 연결
MyDelegate myDel = new MyDelegate(this.SayHello);
//4.대리자 호출
myDel();
}
//1. 메서드 정의
void SayHello()
{
Console.WriteLine("안녕하세요");
}
}
}
매개변수 있는 대리자
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
public class App
{
//2. 대리자 형식 정의
delegate int MyDelegate(int a, int b);
public App()
{
//3. 대리자 인스턴스화, 메서드 연결
MyDelegate myDel = new MyDelegate(this.Sum);
//4. 대리자 호출
int sum = myDel(3, 4);
Console.WriteLine(myDel(3,4));
}
//1.메서드 정의
int Sum(int a,int b)
{
return a + b;
}
}
}
Console,WriteLine(sum) 이렇게 말고 myDel(3,4)이렇게 바로 다이렉트로 써도된다는 것을 알게 됨
2.람다 연습
메서드 정의 X
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace practice2
{
class App
{
delegate void MyDel();
public App()
{
MyDel del = () =>
{
Console.WriteLine("안녕하세요");
};
del();
}
}
}
매개변수 O
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace practice2
{
class App
{
//1.대리자 형식 정의
delegate void MyDel(string name);
public App()
{
//대리자 인스턴스화
MyDel del = (name) => {
Console.WriteLine("{0}님 안녕하세요", name);
};
del("홍길동");
}
}
}
Hero 에서 Move 메서드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace practice2
{
class Program
{
static void Main(string[] args)
{
new App();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace practice2
{
public class App
{
//1.대리자 형식 정의
public delegate void DelHeroMoveComplete();
//생성자
public App()
{
//2.대리자 인스턴스화
DelHeroMoveComplete del = () => {
Console.WriteLine("영웅이 이동완료했습니다");
};
Hero hero = new Hero();
hero.Move(del);
}
}
}
3.Action 대리자 Func 대리자
Action대리자는 리턴 값이 없는 함수에서 Func은 있는 함수에서
action 대리자 연습
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace practice2
{
public class App
{
//생성자
public App()
{
Hero hero = new Hero();
hero.moveComplete = () => {
Console.WriteLine("영웅이 이동완료 했습니다");
};
hero.Move();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace practice2
{
public class Hero
{
public Action moveComplete;
public Hero()
{
}
public void Move()
{
Console.WriteLine("이동중");
this.moveComplete();
}
}
}
4.