Welcome To My Blog🍺!|

园龄:粉丝:关注:

特性—[CallerMemberName]

[CallerMemberName] 是 C# 中的一个特性(Attribute),用于在方法参数中标记一个字符串参数,用来自动获取调用该方法的成员名称(方法、属性、字段等)。

当在方法参数中使用了 [CallerMemberName] 特性时,如果该参数没有被显式地传入值,编译器会自动将调用方法的成员名称作为参数的默认值。这样,你就无需手动传入成员名称,而是可以直接使用方法的调用者的成员名称。

这个特性通常在实现属性更改通知(Property Change Notification)时非常有用。当你在属性的 setter 方法中调用属性更改通知事件时,可以使用 [CallerMemberName] 来自动获取当前属性的名称,避免手动传入属性名称字符串,减少了硬编码和重复代码。

例如,以下是一个简单的示例,展示了如何使用 [CallerMemberName] 特性:

复制代码
 1 private string _name;
 2 
 3 public string Name
 4 {
 5     get { return _name; }
 6     set
 7     {
 8         if (_name != value)
 9         {
10             _name = value;
11             NotifyPropertyChanged(); // 调用属性更改通知方法
12         }
13     }
14 }
15 
16 public event PropertyChangedEventHandler PropertyChanged;
17 
18 protected void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
19 {
20     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
21 }
复制代码

在上述示例中,当 Name 属性的值发生变化时,我们通过调用 NotifyPropertyChanged 方法来触发属性更改通知事件。由于在 NotifyPropertyChanged 方法的参数中使用了 [CallerMemberName],所以我们无需手动传入属性名称,编译器会自动将调用 NotifyPropertyChanged 方法的成员名称作为参数的默认值。这样,我们可以在整个类中重复使用该方法,而不必每次都手动传入属性名称。

让我们来详细解释这个例子的代码行:[CallerMemberName] string propertyName = null

  • [CallerMemberName]:这是特性的名称,告诉编译器要将该参数设置为调用者的成员名称。
  • string propertyName:这是参数的声明,指定了参数的类型为字符串,用于存储调用者的成员名称。
  • = null:这是一个默认值的赋值语句,指定了参数的默认值为 null。这意味着如果在调用 NotifyPropertyChanged 方法时未提供参数值,propertyName 参数将自动设置为 null

所以,当你调用 NotifyPropertyChanged 方法时,如果不传递 propertyName 参数的值,编译器将自动将调用该方法的成员名称赋值给 propertyName 参数。这样,你就可以在方法内部使用该成员名称进行属性更改通知,而无需手动指定属性的名称。

例如,如果在属性的 setter 方法中调用 NotifyPropertyChanged(),而没有显式传递参数值,propertyName 参数将自动设置为调用该 setter 方法的属性名称。

请注意,[CallerMemberName] 特性只能应用于方法的参数,并且要求参数类型为字符串。它不能应用于其他类型的参数或方法的返回值。

总而言之,[CallerMemberName] 特性提供了一种便捷的方式来获取方法的调用者的成员名称,通常在属性更改通知等场景下使用,减少了手动传入成员名称的工作量,提高了代码的可读性和可维护性。

本文作者:kai-liang

本文链接:https://www.cnblogs.com/kai-liang/p/17445711.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   退退退退下吧  阅读(1078)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.

作曲 : Reol

作词 : Reol

fade away...do over again...

fade away...do over again...

歌い始めの一文字目 いつも迷ってる

歌い始めの一文字目 いつも迷ってる

どうせとりとめのないことだけど

伝わらなきゃもっと意味がない

どうしたってこんなに複雑なのに

どうしたってこんなに複雑なのに

噛み砕いてやらなきゃ伝わらない

ほら結局歌詞なんかどうだっていい

僕の音楽なんかこの世になくたっていいんだよ

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.

目の前 広がる現実世界がまた歪んだ

目の前 広がる現実世界がまた歪んだ

何度リセットしても

僕は僕以外の誰かには生まれ変われない

「そんなの知ってるよ」

気になるあの子の噂話も

シニカル標的は次の速報

麻痺しちゃってるこっからエスケープ

麻痺しちゃってるこっからエスケープ

遠く遠くまで行けるよ

安定なんてない 不安定な世界

安定なんてない 不安定な世界

安定なんてない きっと明日には忘れるよ

fade away...do over again...

fade away...do over again...

そうだ世界はどこかがいつも嘘くさい

そうだ世界はどこかがいつも嘘くさい

綺麗事だけじゃ大事な人たちすら守れない

くだらない 僕らみんなどこか狂ってるみたい

本当のことなんか全部神様も知らない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.