728x90
namespace CSharp
{
enum ItemType
{
Weapon,
Armor,
Ring,
}
enum Rarity
{
Nomal,
Uncommon,
Rare,
}
class Item
{
public ItemType itemType;
public Rarity rarity;
}
class Program
{
static List<Item> items = new List<Item>();
아래에 두 특정 아이템을 찾는 함수를
static Item FindWeapon()
{
foreach (Item item in items)
{
if (item.itemType == ItemType.Weapon)
{
return item;
}
}
return null;
}
static Item FindRareWeapon()
{
foreach (Item item in items)
{
if (item.rarity == Rarity.Rare)
{
return item;
}
}
return null;
}
delegate bool ItemSelector(Item item);
델리게이트를 사용하여 아래 두 함수를 하나로 압축할 수 있다.
static Item FindItem(ItemSelector selector)
{
foreach (Item item in items)
{
if (selector(item))
{
return item;
}
}
return null;
}
델리게이트 함수에서 무기를 찾는 함수
static bool IsWeapon(Item item)
{
return item.itemType == ItemType.Weapon;
}
static void Main()
{
items.Add(new Item() { itemType = ItemType.Weapon, rarity = Rarity.Nomal });
items.Add(new Item() { itemType = ItemType.Armor, rarity = Rarity.Uncommon });
items.Add(new Item() { itemType = ItemType.Ring, rarity = Rarity.Rare });
무기 말고 다른 아이템을 찾을 때마다 함수를 생성해야 하는데
Item weaponItem1 = FindItem(IsWeapon);
델리게이트를 사용한 무명 함수로 즉석에서 함수를 생성하거나
Item weaponItem2 = FindItem(delegate (Item item)
{
return item.itemType == ItemType.Weapon;
});
람다식 Lambda : 무명 함수를 만드는데 사용하는 문법
람다식을 이용해 간결하게 표현할 수 있다.
Item weaponItem3 = FindItem((Item item) => { return item.itemType == ItemType.Weapon; });
}
}728x90
'C# > 공부' 카테고리의 다른 글
| C# Exception 예외처리 (0) | 2021.09.06 |
|---|---|
| C# Event (0) | 2021.09.03 |
| C# Delegate (0) | 2021.09.03 |