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; }
}
これらは、2つの無関係のシナリオ用です。 'CallerMemberName'はあなたを呼んでいる人を示し、' nameof'はあなたが呼んでいる人を知らせます。 – GSerg
私は質問があると思います: 'nameof'を使ってメンバ名を持つメソッドを提供するのですか、それとも' CallerMemberName'に依存して私のために行うべきですか? –
@PatrickHofman true、ill edit – Mafii