void ํ•จ์ˆ˜์ž„()
{
}
class ํด๋ž˜์Šค
{
ย  ย  void ๋ฉ”์„œ๋“œ์ž„(int ๋งค๊ฐœ๋ณ€์ˆ˜์ž„)
ย  ย  {
ย  ย  }
}


๋ฉ”์„œ๋“œ = ํด๋ž˜์Šค ํ•จ์ˆ˜

๋Œ€๋ฆฌ์ž = ๋ฉ”์„œ๋“œ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ง‘์–ด๋„ฃ๋Š” ๊ธฐ๋Šฅย 


๋Œ€๋ฆฌ์ž - C# ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€์ด๋“œ | Microsoft Learn

public static void Sibal1()
{
ย  //...
}
public static void Sibal2()
{
ย  //...
}

public delegate void Sibal();

public static void SibalHelper(Sibal sibalMethod)
{
ย  ย  sibalMethod();
}

static void Start()
{
ย  ย  // ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„ฃ๊ธฐ
ย  ย  SibalHelper(Sibal1); // Sibal1() ์‹คํ–‰๋จ
ย  ย  SibalHelper(Sibal2); // Sibal2() ์‹คํ–‰๋จ
}



public static void Sibal1()
{
ย  //...
}

public delegate void Sibal();

static void Start()
{
ย  ย  // ๋Œ€์ž…? ์œผ๋กœ ๋„ฃ๊ธฐ
ย  ย  Sibal siVal = Sibal1;
ย  ย  siVal(); // Sibal1() ์‹คํ–‰๋จ
}

์ง‘์–ด๋„ฃ๊ธฐ๋‹ˆ๊นŒ = ์—ฐ์‚ฐ์ž๋„ ๋จ.


public static void Sibal1()
{
ย  //...
}
public static void Sibal2()
{
ย  //...
}

public delegate void Sibal();

static void Start()
{
ย  ย  // ๋Œ€๋ฆฌ์ž ์ฒด์ธ delegate chain
ย  ย  Sibal sibalChain;

ย  ย  Sibal sibalChain += Sibal1;
ย  ย  Sibal sibalChain += Sibal2;
ย  ย  sibalChain(); // Sibal1, Sibal2 ๋‘˜ ๋‹ค ์‹คํ–‰๋จ
}

๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ ์‹คํ–‰ํ•  ๋•Œ ํŽธํ•จ.


ex) ๋ ˆ๋ฒจ์—… ์‹œ, ์ฒด๋ ฅ ์—…, ๋งˆ๋ฐฉ ์—… ์‹œํ‚ค๋Š” ํ•จ์ˆ˜๋“ค์ด ์žˆ์„ ๋•Œ,ย 

up += AddDefense;
upย += AddHealth;


up(5);ย 

ํ•˜๋ฉด AddDefense(5), AddHealth(5) ํ•œ๊ฑฐ๋ž‘ ๊ฐ™์Œ.



๋žŒ๋‹ค์‹ย 


static void Start()
{
ย  ย  Sibal sibalChain;

ย  ย  Sibal sibalChain += Sibal1;
ย  ย  // ์ด๋ฆ„ ์—†๋Š” ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ
ย  ย  Sibal sibalChain += delegate () { print("sibal"); };
ย  ย  Sibal sibalChain += Sibal2;
ย  ย  sibalChain();
}

// public delegate void (); ์ด๋Ÿฐ๋А๋‚Œ
// ํ•œ๋ฒˆ ๋ฐ–์— ์•ˆ ์“ธ๊ฑด๋ฐ ํ•จ์ˆ˜๋กœ ์ ๊ธฐ ์‹ซ์„๋•Œ ์”€
// ๊ธฐ์™• ์•„๋ผ๋Š” ๊น€์— ๋” ์ ˆ์•ฝํ•ด์„œ ์“ฐ๊ธฐ => ๋žŒ๋‹ค์‹
Sibal sibalChain += delegate () { print("sibal"); };
Sibal sibalChain += () => print("sibal");
// ๊ฐ™์Œ


Action ๋Œ€๋ฆฌ์ž (System) | Microsoft Learn

Action ๋ณด์ด๋“œ ๋ฐ˜ํ™˜ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ,

Func ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฒŒ ์žˆ๋Š” ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ

๊ท€์ฐฎ๊ฒŒ ํ•œ ์ค„ ๋” ์“ฐ์ง€๋ง๋ผ๊ณ  c#์ด ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋†“์€ ๋А๋‚Œ



public static void Sibal1()
{
ย  //...
}
public static void Sibal2()
{
ย  //...
}

// public delegate void Action();
// public delegate void Sibal();
// ๊ฐ™์Œ

// public static void SibalHelper(Sibal sibalMethod)
public static void SibalHelper(Action sibalMethod)
{
ย  ย  sibalMethod();
}

static void Start()
{
ย  ย  // ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„ฃ๊ธฐ
ย  ย  SibalHelper(Sibal1); // Sibal1() ์‹คํ–‰๋จ
ย  ย  SibalHelper(Sibal2); // Sibal2() ์‹คํ–‰๋จ
}