[ C# ] Action 과 Func

2024. 3. 13. 00:07C#/구문

Action 대리자


리턴 값이 없는 함수를 참조하는 delegate(대리자)이다.

 

System namespace에서 기본적으로 제공되는 대리자 중 하나로

기존의 delegate와는 다르게 별도의 namespace에서 명시하지 않고 직접 사용할 수 있다.

 

Action은 매개변수의 수에 따라 0개에서 부터 16개의 매개변수를 받아들이는 delegate가 있다.

즉, 0개 : Action delegate, 1개 : Action<T> delegate, 2개 : Action<T1, T2> delegate, 3개 : Action<T1, T2, T3> delegate ....

이런 형식의 파라미터가 있는 Action delegate가 존재한다.

 

이렇게 Action 대리자는 여러 특징들을 가지고 있지만 우리가 가장 중요하게 봐야하는 것은

처음에 언급한 리턴 값이 없다는 점이다.

 

예시

using System;
using System.Windows.Forms;

public class Name
{
   private string instanceName;

   public Name(string name)
   {
      this.instanceName = name;
   }

   public void DisplayToConsole()
   {
      Console.WriteLine(this.instanceName);
   }

   public void DisplayToWindow()
   {
      MessageBox.Show(this.instanceName);
   }
}

public class testTestDelegate
{
   public static void Main()
   {
      Name testName = new Name("Koani");
      Action showMethod = testName.DisplayToWindow;
      // 액션 delegate 선언
      // 리턴 값이 없는 DisplayToWindow 함수를 참조하고 있다.
      showMethod();
   }
}

 


 Func 대리자


리턴 값을 반환하는 함수를 참조하는 대리자이다.

 

Action과 유사한 특징을 가지고 있어 별도의 명시 없이 사용할 수 있다.

 

또한 Action 대리자와 마찬가지로 0개에서 부터 16개의 까지의 매개변수를 받아들이는 delegate가 존재한다.

 

예시

public class MyClass
{
    public static int GetNumber()
    {
        return 42;
    }

    public static string ToString(int number)
    {
        return "Number: " + number;
    }
}

public class MainClass
{
    public static void Main()
    {
        Func<int> numberFunc = MyClass.GetNumber;
        int number = numberFunc();
        Console.WriteLine("Number: " + number);

        Func<int, string> toStringFunc = MyClass.ToString;
        string result = toStringFunc(42);
        Console.WriteLine(result);
    }
}

'C# > 구문' 카테고리의 다른 글

[ C# ] 메서드 매개 변수 ref, in, out  (0) 2024.03.27
[ C# ] 리스트(List)  (0) 2024.03.13
[ C# ] 예외 처리  (0) 2024.03.11
[ C# ] foreach 문  (0) 2024.03.04