반응형
표현식 본체 멤버(Expression-bodied member)
단일 표현식으로 메서드, 속성, 생성자 등을 정의하는 방법이다. => 문법을 사용하여 작성한다.
람다식을 정의하는 것과 동일한 형태로 간결하게 식으로 변환이 가능하다.
예제로 알아보는 표현식 본체 멤버 사용
// 메서드에서 하나의 Point 객체 리턴
public Point Move(int x, int y)
{
return new Point(X+x, Y+y);
}
public Point Move(int x, int y) => new Point(X+x, Y+y);
// 메서드에서 void 리턴
public void Print()
{
Console.WriteLine(data);
}
public void Print() => Console.WriteLine(data);
// 속성에서 get 리턴
public string Name
{
get
{
return FirstName + " " + LastName;
}
}
public string Name => FirstName + " " + LastName;
// 인덱서에서 Customer 객체 리턴
public Customer this[int id]
{
get
{
return db.FindCustomer(id);
}
}
public Customer this[int id] => db.FindCustomer(id);
// 연산자 메서드 표현
public static Complex operator +(Complex a, Complex b)
{
return a.Add(b);
}
public static Complex operator +(Complex a, Complex b) => a.Add(b);
암시적 연산자(Implicit Operator)
암시적 연산자는 타입 변환 연산자로서, 한 타입에서 다른 타입으로 변환할 때 명시적인 캐스팅 없이 대입만으로 타입을 변환시켜 준다.
예제로 알아보는 암시적 연산자 사용
// 명시적 변환 string -> MyData
public static MyData MyData1 = new MyData("test1");
// 암시적 변환 오버라이딩으로 문자열 바로 대입가능 string -> MyData
public static MyData MyData2 = "test2";
표현식 본체 멤버를 적용한 암시적 연산자 예제
생성자에도 표현식 본체 멤버를 적용할 수 있기 때문에 적용해서 한 줄짜리 간단한 표현식으로 변환이 가능하다.
public class MyData
{
private string data;
public MyData(string data)
{
this.data = data;
}
public static implicit operator MyData(string data)
{
return new MyData(data);
}
// 표현식 본문 멤버를 적용한 암시적 연산자
public static implicit operator MyData(string data) => new MyData(data);
}
헷갈리는 get 프로퍼티에 표현식 본체 멤버와 암시적 연산자 단계별로 적용해 보기
public static class MyStaticData
{
// get 프로퍼티에 표현식 본체 멤버와 암시적 연산자 단계별로 적용해보기
public static MyData MyData1
{
get
{
return new MyData("test1");
}
}
// 암시적 연산자 적용
public static MyData MyData2
{
get
{
return "test2";
}
}
// 표현식 본체 멤버 적용
public static MyData MyData3
{
get => "test3";
}
// 최종적으로 간결해진 코드 모습
public static MyData MyData4 => "test4";
}
public class MyData
{
private string data;
public MyData(string data)
{
this.data = data;
}
public static implicit operator MyData(string data)
{
return new MyData(data);
}
}
같이 읽으면 좋은 글
'프로그래밍 > C#' 카테고리의 다른 글
C# Count vs Count() 차이에 대해서 (0) | 2024.12.16 |
---|---|
C# 속성(Property)이란 무엇인가 (1) | 2024.12.12 |
C# 문자열 비교하기 ==연산자 vs Equlas() 메서드 (0) | 2024.11.27 |
C# 비동기 프로그래밍 TAP이란 무엇인가? (0) | 2024.11.22 |
C# 비동기 프로그래밍 APM이란 무엇인가? (0) | 2024.11.21 |
댓글