CallerMemberName은 어떻게 구현됩니까?멤버 이름이 nameof 인 메소드를 제공해야합니까? 아니면 CallerMemberName에 의존해야합니까?
내가하는 일을 이해하면 코드에서 마법의 문자열을 지킬 수 있습니다. 그러나 nameof
이상으로 사용해야하고 더 좋은 것은 무엇입니까?
차이점/CallerMemberName은 어떻게 작동합니까?
CallerMemberName은 어떻게 구현됩니까?멤버 이름이 nameof 인 메소드를 제공해야합니까? 아니면 CallerMemberName에 의존해야합니까?
내가하는 일을 이해하면 코드에서 마법의 문자열을 지킬 수 있습니다. 그러나 nameof
이상으로 사용해야하고 더 좋은 것은 무엇입니까?
차이점/CallerMemberName은 어떻게 작동합니까?
CallerMemberName
은 현재 멤버의 이름을 다른 메서드 호출에 배치하는 컴파일 타임 트릭입니다. nameof
도 비슷한 일을하는 컴파일 타임 트릭이다. 이것은 멤버의 문자열 표현을 취한다.
어느 것이 당신에게 달려 있습니다. 나는 말할 수있다 : 당신이 할 수있는 곳에서 CallerMemberName
을 사용하고, 어디에서 nameof
을 사용해야하는지. CallerMemberName
은 nameof
보다 더 자동화되어 있으므로 그 중 하나를 선호합니다.
둘 모두 동일한 성능 영향을 미칩니다. 컴파일 시간에만 코드를 평가하는 데 약간의 시간이 걸리지 만 무시할 수 있습니다.
따라서 호출은 문자열이있는 간단한 호출로 바뀝니다 (따라서 nameof 대신 문자열 리터럴을 사용할 때와 동일합니까?) – Mafii
참으로. 그것은 모두 동일합니다. –
[CallerMemberName]
및 nameof
은 완전히 바꿔 쓸 수 없습니다. 때로는 동일한 방법에 대해 이야기하고있을 때도 때로는 첫 번째, 때로는 두 번째가 필요할 수 있습니다.
class Foo : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private string title;
public string Title
{
get { return title; }
set
{
if (title != value)
{
title = value;
// we're using CallerMemberName here
OnPropertyChanged();
}
}
}
public void Add(decimal value)
{
Amount += value;
// we can't use CallerMemberName here, because it will be "Add";
// instead of this we have to use "nameof" to tell, what property was changed
OnPropertyChanged(nameof(Amount));
}
public decimal Amount { get; private set; }
}
두 가지 서로 관련이없는 시나리오입니다. 'CallerMemberName'은 누가 당신을 부르는 지 알려주고,'nameof'는 당신이 누구인지를 알려줍니다. – GSerg
내가 생각하기에 :'nameof'를 사용하여 멤버 이름으로 메소드를 제공해야합니까, 아니면'CallerMemberName'에 의존해야합니까? –
@PatrickHofman true, ill edit – Mafii