Notice
Recent Posts
Recent Comments
Link
반응형
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- 디지털트윈
- Unity
- articulation body
- 습관형성 #직장인자기계발 #오공완
- Simulation
- 깊이탐색
- 너비탐색
- 최소신장트리 mst
- C#
- 크루스칼
- 행동트리
- 오블완
- 유니티
- 트리구조
- 드롭다운
- dropdown
- list clear
- readonly
- 유니티 sparkmain(clone)
- 최단거리 알고리즘
- 티스토리챌린지
- sparkmain(clone) 무한생성
- GetComponent
- removeAll
- raycast
- dfs
- unity korea
- unity sparkmain(clone)
- navisworks api
- sparkmain(clone)
Archives
- Today
- Total
낑깡의 게임 프로그래밍 도전기
C# 대리자(Delegate, Action) 본문
반응형
프로그래밍을 설명할때 영화에 빗대어 설명하는 것이 좋다
a배우와 b배우가 잇다고 가정해보자 남자여자 배우가 포용하는 장면을 찍을걸 코드로 찍기
clasee ActorA
{
public void Action()
{
Console.WriteLine("A가 포옹한다")
}
}
clasee ActorB
{
public void Action()
{
Console.WriteLine("B가 포옹한다")
}
}
class Camera
{
public void PickupCamera()
{
Console.WriteLine("카메라를 든다")
}
}
pulic void Action
{
Consloe.WriteLine("B기 포옹한다")
Camera camera = new Camera();
camera.PickupCamera();
}
이렇게 코드를 짜면 의존성이 늘어난다.
static void Main(string [] args)
{
Console.WriteLine("시작부분")
new ActionA().Action();
new ActionB().Action();
Camera camera = new Camera();
camera.PickupCamera();
}
이렇게 쓸수도 있겠지만...대리자를 쓸수 있다.
clasee ActorB
{
public void Action(Action action)
{
Console.WriteLine("B가 포옹한다")
action.Invoke();
}
}
static void Main(string [] args)
{
Console.WriteLine("시작부분")
new ActionA().Action();
//실행할 함수를 담아줌 받는쪽에서는 내가 끝났어라고만 알려주면 실행됨
new ActorB().Action(CameraPickup); //파라미터를 Action으로 받음
}
static void CameraPickup()
{
Camera camera = new Camera();
camera.PickupCamera();
}
clasee ActorA
{
public void Action()
{
Console.WriteLine("A가 포옹한다")
}
}
clasee ActorB
{
public void Action(Action<string> action)//string 받아 써줄수 있음 //받는 쪽에서는 모양만 유지해주면 됨
{
Console.WriteLine("B가 포옹한다")
action.Invoke("나 액션 끝났어");//써줄 수 있음.
}
}
static void Main(string [] args)
{
Console.WriteLine("시작부분")
new ActionA().Action();
//실행할 함수를 담아줌 받는쪽에서는 내가 끝났어라고만 알려주면 실행됨
new ActorB().Action(CameraPickup); //파라미터를 Action으로 받음
}
static void CameraPickup(string actorMessage)
{
Console.WriteLine("카메라 감독이 받은 메세지 :" + actorMessage)
Camera camera = new Camera();
camera.PickupCamera();
}
//실행결과
시작부분
A가 포옹한다
B가 포옹한다
카메라 감독이 받은 메세지 : 나 액션 끝났어
카메라를 든다
dalegate vodi MyDelegate(string actoorMessage);//이렇게 델리게이트를 만들어서 Action대신에 쓸 수있다
internal Class Program
{
clasee ActorA
{
public void Action()
{
Console.WriteLine("A가 포옹한다")
}
}
clasee ActorB
{
public void Action(MyDelegate handler)//여기에 바꿔주기
{
Console.WriteLine("B가 포옹한다")
action.Invoke("나 액션 끝났어");
}
}
static void Main(string [] args)
{
Console.WriteLine("시작부분")
new ActionA().Action();
MyDelegate myDelegate = CameraPicup;//이렇게
myDelegate += Effect;//두개가 실행됨//myDelegate = Effect;이렇게 하면 바뀐다
new ActorB().Action(myDelegate); //바꿔줌
}
static void CameraPickup(string actorMessage)
{
Console.WriteLine("카메라 감독이 받은 메세지 :" + actorMessage)
Camera camera = new Camera();
camera.PickupCamera();
}
static void Effect(string actorMessage)
{
Console.WriteLine("연출 감독이 받은 메세지 :" + actorMessage)
Console.WriteLine("폭죽을 터트린다");
}
}
//실행결과
시작부분
A가 포옹한다
B가 포옹한다
카메라 감독이 받은 메세지 : 나 액션 끝났어
카메라를 든다
연출 감독이 받은 메세지 : 나 액션 끝났어
폭죽을 터트린다
분리를 위해 델리게이트와 이벤트는 중요하다 안그러면 종속성 의존성이 높아진다.
용어정리
Delegate, event 기능이 있다.
이벤트, 콜백, 핸들러라는 말을 많이 쓴다 //위의 event와는 다른 이벤트다
보통 핸들러 델리게이트 이벤트 같은 경우는 쓰는 모양이 거의 흡사해서 많이 써봐야한다.
*a라는 스킬을 발동할때 파이어볼 10개를 줄일때. 스킬이 발동 이벤트만 넘겨주고 스킬을 관리 하는 곳에서 파이어불 리스트를 삭제 하는 것과 같이 기능 구분
반응형
'C#' 카테고리의 다른 글
| C# 상속 (Up, Down casting), as is (0) | 2025.07.21 |
|---|---|
| C# 클래스 : 생성자, readonly, 한정자, this (0) | 2025.07.20 |
| C# 가변파라미터(params), 선택적 인수, 명명된 인수 (0) | 2025.07.18 |
| C# 오버로딩(overloading) (0) | 2025.07.18 |
| C# 디버깅 (0) | 2025.07.17 |