시작 전에 간단하게 공부한 내용만 집고 넘어가자
delegate 델리게이트
다른 프로그래밍 언어에서는 함수 포인터라는 용어를 사용하기도 하는데
변수명으로 메소드를 등록하여 사용할 수 있게 지원해준다.
예를 들면
int Calc(int x, int y)
{
return x + y;
}
delegate int Plus(int x, int y);
class Program()
{
static void main()
{
Plus p = Calc;
int result = p(3, 5);
}
}
delegate int Plus의 선언을 통해 매개변수를 만들어주고
메인 내부에서 Plus p = Calc 를 입력해 p라는 변수가 Calc라는 메소드를 등록하여 대신 사용할 수 있게 되었다.
Lambda 람다
람다를 사용하면 메서드의 이름 없이 익명 메서드를 생성 가능하다.
람다는 델리게이트를 사용하여 변수에 할당하거나 메서드의 매개변수로 전달이 가능하다.
using System;
delegate void Dele(string message); //먼저 델리게이트를 선언해준다.
internal class Program
{
static void Main(string[] args)
{
Dele D = (message) => //람다식을 통해 델리게이트에 할당해준다.
{
Console.WriteLine(message);
};
D("abc");
}
}
보면 새로 정의된 Dele라는 델리게이트 함수는 직접적으로 다른 메소드를 등록한 것이 아닌
Dele D = (message) => {};의 형식으로 작성된 것을 볼 수 있다.
(델리게이트함수) = (변수) => {실행내용};
이것을 람다라고 부르며 이름이 없는 메소드의 형식이다.
message라는 매개변수를 람다식을 통해 델리게이트 메소드에 등록하고 이를 실행한 것이다.
아무튼 강의를 좀 더 들었더니 생각난 방법이 좀 있다
C#에서 쿼리문을 지원해서 잘만 하면 인벤토리와 장착품간의 관계를 만들어서
쿼리문으로 장착 여부에 접근할 수 있을 것 같다는 생각이 들었다.
우선 내 생각은 이렇다
Table이라는 클래스를 만들고
내부에 두 개의 아이템 리스트를 만든다.
하나는 인벤토리 하나는 장착아이템으로 테이블을 만든 뒤
두 리스트를 하나의 리스트로 묶어서 관리하면
인벤토리를 보여줄 때 장착 아이템 밑에 인벤토리 아이템이 표시되는 방식으로 표시할 수 있을것이고
장착 아이템은 모두 E 를 붙이고 인벤토리 아이템은 별도로 표시되게끔 되지 않을까?
구현해보자.
구현하다가 든 생각인데 그냥 이럴것 없이 두 번 출력하면 되는 것 아닌가...
그냥 두 번 출력하기로 결정
중요한건 똑같은 아이템이 두번 출력되면 안된다.
왜냐면 지금 두 번 출력 중이라서..
Inventory에서 Equipments 리스트로 완전히 넘겨주고 해제한다면 다시 Inventory로 넘겨주는 방식을 사용해야한다.
결과는?
대실패 마음이 꺾인다...
본가 거주 중이라 부모님이 외식하자고 해서 먼저 들어가겠습니다 TTE
0926 TIL? - 팀 프로젝트 돌입 (0) | 2024.09.26 |
---|---|
0925 TIL - C# 알고리즘1 (0) | 2024.09.25 |
0923 TIL - Re: C#으로 Text RPG 만들기 2 (1) | 2024.09.24 |
0922 TIL - Re : C#으로 Text RPG 만들기 (2) | 2024.09.22 |
0920 TIL - C#으로 텍스트 게임 만들기 1 (0) | 2024.09.20 |