Workspace/C#

[C# 7.0] 로컬 함수

Bombus 2023. 4. 17. 09:49

C# 7.0에 로컬 함수란 것이 추가되었다.

메서드 내의 메서드로 중첩된 형식이다.

 

로컬 함수를 포함하는 메서드내에서만 호출할 수 있기 때문에

실수로 메서드를 호출되는 상황 등을 방지할 수 있고, 코드의 의도를 명확하게 한다.

 

| 사용방법

 

public class Foo
{
  public void DoBar() {
    int foobar = 1;
    DoTask().Forget();    

    // 로컬 함수
    async UniTask DoTask() {
      foobar++;
      await DoSome(foobar);
    }
  }
}
 

위와 같이 메서드 내에 정의하고 보통의 메서드처럼 호출해서 사용하면 된다.

 

| 제약

 

로컬 함수는 아래에서 선언하고 호출할 수 있다.

 

  • 메서드, 반복기 메서드 / 비동기 메서드
  • 생성자
  • 속성 접근자
  • 이벤트 접근자
  • 무명 메서드
  • 람다 식
  • 종료자(소멸자)
  • 다른 로컬 함수

 

그리고 아래의 한정자를 사용할 수 있다.

 

  • async
  • unsafe
  • static (단, 지역 변수나 인스턴스 상태를 캡처할 수 없음)
  • extern

 

로컬 함수 캡처나, Action, Func, delegate 형식에 대입도 되는 것 같다.

자세한 내용은 공식문서를 참고하시라.

 

| 참고

 

 

 

반응형