=> 연산자


연산자는 C#에서 두 가지 방법으로 사용할 수 있습니다.




이 중에서도 두번째 식 본문의 정의에 대해서 알아보겠습니다




식 본문 정의

식 본문 정의는 간결하고 읽을 수 있는 형식으로 멤버 구현을 제공합니다. 다음과 같은 일반적인 구문을 포함합니다.


member => expression;


여기서 expression은 유효한 식입니다. 은 멤버의 반환 형식이 void이거나 멤버가 생성자 또는 종료자인 경우에만 statement 식일 수 있습니다.

메서드 및 속성 가져오기 문에 대한 식 본문 정의는 C# 6부터 지원됩니다. 생성자, 종료자, 속성 설정 문 및 인덱서에 대한 식 본문 정의는 C# 7부터 지원됩니다.

Person.ToString 메서드에 대한 식 본문 정의는 다음과 같습니다.


public override string ToString() => $"{fname} {lname}".Trim();


다음과 같은 메서드 정의의 약식 버전입니다.

public override string ToString() { return $"{fname} {lname}".Trim(); }



식 본문 멤버




식 본문 정의를 사용하면 간결하고 읽을 수 있는 형식으로 멤버 구현을 제공할 수 있습니다. 메서드 또는 속성과 같은 지원되는 멤버에 대한 논리가 단일 식으로 구성된 경우 식 본문 정의를 사용할 수 있습니다. 식 본문 정의의 일반 구문은 다음과 같습니다.


member => expression;


여기서 expression은 유효한 식입니다.

C# 6에서는 메서드 및 속성 가져오기 접근자에 대해 식 본문 정의 지원이 도입되었으며 C# 7.0에서는 지원이 확장되었습니다. 

다음 표에 나열된 형식 멤버와 함께 식 본문 정의를 사용할 수 있습니다.


멤버지원 버전
메서드C# 6
생성자C# 7.0
종료자C# 7.0
속성 가져오기C# 6
속성 설정C# 7.0
인덱서C# 7.0


메서드

식 본문 메서드는 형식이 메서드의 반환 형식과 일치하는 값을 반환하거나 void를 반환하는 메서드의 경우 일부 작업을 수행하는 단일 식으로 구성됩니다. 예를 들어 ToString 메서드를 재정의하는 형식에는 일반적으로 현재 개체의 문자열 표현을 반환하는 단일 식이 포함되어 있습니다.

다음 예제에ToString 메서드를 식 본문 정의로 재정의하는 Person 클래스를 정의합니다. 또한 이름을 콘솔에 표시하는 DisplayName메서드를 정의합니다. return 키워드는 ToString 식 본문 정의에 사용되지 않습니다.


using System; public class Person { public Person(string firstName, string lastName) { fname = firstName; lname = lastName; } private string fname; private string lname; public override string ToString() => $"{fname} {lname}".Trim(); public void DisplayName() => Console.WriteLine(ToString()); } class Example { static void Main() { Person p = new Person("Mandy", "Dejesus"); Console.WriteLine(p); p.DisplayName(); } }



생성자

생성자에 대한 식 본문 정의는 일반적으로 생성자의 인수를 처리하거나 인스턴스 상태를 초기화하는 단일 할당 식 또는 메서드 호출로 구성됩니다.

다음 예제에서는 생성자에 name이라는 단일 문자열 매개 변수가 있는 Location 클래스를 정의합니다. 식 본문 정의에서 Name 속성에 인수를 할당합니다.

public class Location { private string locationName; public Location(string name) => Name = name; public string Name { get => locationName; set => locationName = value; } }


종료자

종료자에 대한 식 본문 정의에는 일반적으로 관리되지 않는 리소스를 해제하는 문 등의 정리 문이 포함되어 있습니다.

다음 예제에서는 식 본문 정의를 사용하여 종료자가 호출되었음을 나타내는 종료자를 정의합니다.

using System; public class Destroyer { public override string ToString() => GetType().Name; ~Destroyer() => Console.WriteLine($"The {ToString()} destructor is executing."); }


속성 가져오기 문

속성 가져오기 접근자를 직접 구현하려는 경우 단순히 속성 값을 반환하는 단일 식에 대해 식 본문 정의를 사용할 수 있습니다. return 문은 사용되지 않습니다.

다음 예제에서는 Location.Name 속성을 정의합니다. 이 속성의 속성 가져오기 접근자는 해당 속성을 지원하는 private locationName필드의 값을 반환합니다.

public class Location { private string locationName; public Location(string name) => Name = name; public string Name { get => locationName; set => locationName = value; } }

식 본문 정의를 사용하는 읽기 전용 속성은 명시적 set 문 없이 구현할 수 있습니다. 사용되는 구문은 다음과 같습니다.

PropertyName => returnValue;


다음 예제에서는 Location 클래스를 정의합니다. 이 클래스의 읽기 전용 Name 속성은 private locationName 필드의 값을 반환하는 식 본문 정의로 구현됩니다.


public class Location { private string locationName; public Location(string name) => locationName = name; public string Name => locationName; }


속성 설정 문

속성 설정 접근자를 직접 구현하려는 경우 속성을 지원하는 필드에 값을 할당하는 한 줄 식에 대해 식 본문 정의를 사용할 수 있습니다.

다음 예제에서는 Location.Name 속성을 정의합니다. 이 속성의 속성 설정 문은 해당 속성을 지원하는 private locationName 필드에 입력 인수를 할당합니다.

public class Location { private string locationName; public Location(string name) => Name = name; public string Name { get => locationName; set => locationName = value; } }


인덱서

속성과 마찬가지로, get 접근자가 값을 반환하는 단일 문으로 구성되거나 set 접근자가 단순 할당을 수행하는 경우 인덱서의 get 및 set 접근자는 식 본문 정의로 구성됩니다.

다음 예제에서는 다양한 스포츠의 이름이 포함된 내부 String 배열을 포함하는 Sports라는 클래스를 정의합니다. 인덱서의 get 및 set 접근자는 둘 다 식 본문 정의로 구현됩니다.

using System; using System.Collections.Generic; public class Sports { private string[] types = { "Baseball", "Basketball", "Football", "Hockey", "Soccer", "Tennis", "Volleyball" }; public string this[int i] { get => types[i]; set => types[i] = value; } }







ref : https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/lambda-operator

ref : https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/statements-expressions-operators/expression-bodied-members

+ Recent posts