C#에서 CallerMemberName이란 뭘까?
[작성자의 다른 글 보러가기: ' C#에서 ' ?. '(널조건연산자) 는 무엇일까?']
CallerMemberName은 C# 5.0부터 도입된 특성(Attribute) 중 하나입니다. CallerMemberName 특성은 Caller Info Attributes라고도 불리며, 메서드 호출자에 대한 정보를 제공하는 데 사용됩니다.
CallerMemberName 특성은 주로 메서드의 매개변수에 사용되며, 해당 매개변수에 CallerMemberName 특성을 지정하면 메서드를 호출하는 코드의 소스 파일에서 호출한 메서드의 이름을 컴파일러에게 알려줍니다. 이렇게 하면 메서드를 호출한 코드의 소스 파일에서 메서드 이름을 명시적으로 전달하지 않아도, 컴파일러가 자동으로 호출한 메서드의 이름을 전달할 수 있습니다.
CallerMemberName 특성은 주로 PropertyChanged 이벤트와 함께 사용되는 경우가 많습니다. INotifyPropertyChanged 인터페이스를 구현하여 속성의 값이 변경될 때 PropertyChanged 이벤트를 발생시키는 경우, 변경된 속성의 이름을 CallerMemberName 특성을 사용하여 자동으로 전달할 수 있습니다.
using System.ComponentModel;
using System.Runtime.CompilerServices;
public class Person : INotifyPropertyChanged
{
private string name;
public string Name
{
get { return name; }
set
{
if (name != value)
{
name = value;
OnPropertyChanged();
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string name = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
위의 예시에서 OnPropertyChanged 메서드의 매개변수에 [CallerMemberName] 특성을 사용하여 속성의 이름을 전달하지 않고, 메서드를 호출한 코드의 소스 파일에서 PropertyChanged 이벤트를 호출한 멤버의 이름을 자동으로 가져와서 사용합니다. 따라서 Name 프로퍼티의 값이 변경될 때, OnPropertyChanged 메서드를 호출하면서 자동으로 "Name"을 매개변수로 전달합니다. 이렇게 하면 코드를 간결하게 유지하고, Name 속성의 이름을 하드코딩하지 않아도 자동으로 처리할 수 있습니다.
'#C#' 카테고리의 다른 글
C#에서 ' ?. '(널조건연산자) 는 무엇일까? (0) | 2023.07.27 |
---|