首页 > 其他分享 >CallerMemberName特性的使用

CallerMemberName特性的使用

时间:2023-06-29 15:56:44浏览次数:48  
标签:CallerMemberName string 特性 class 使用 MyClass public name

C# 6.0引入的一个特性,在属性或方法的参数中使用,用来获取调用者的成员名。

1.在方法中使用

public class MyClass
    {
        private string _myProperty;

        public string MyProperty
        {
            get { return _myProperty; }
            set { _myProperty = value; }
        }

        public void MyMethod([CallerMemberName] string propertyName = "")
        {
            Console.WriteLine($"调用我的是:{propertyName}");
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            MyClass mc = new MyClass();
            mc.MyProperty = "Hello World";
            mc.MyMethod();

            Console.ReadLine();
        }
    }

执行结果:

 

2.在WPF的通知绑定中应用

通常我们定义是这样的,以下示例只有实现一个属性,若是有多个,每个都要写通知,参数(“Name”)很容易写错。应用时将不再更新UI。

public class MyClass : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private string name;

        public string Name
        {
            get { return name; }
            set 
            { 
                name = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Name"));
            }
        }
    }

我们使用CallerMemberName特性来改造一下,再也不用去写这个参数了。

public class NotifyBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public void DoNotify([CallerMemberName] string propName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
        }
    }

    public class MyAnotherClass:NotifyBase
    {
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; this.DoNotify(); }
        }
    }

 

标签:CallerMemberName,string,特性,class,使用,MyClass,public,name
From: https://www.cnblogs.com/duju/p/17514408.html

相关文章

  • 使用Kettle定时从数据库A刷新数据到数据库B
    一、需求背景由于项目场景原因,需要将A库(MySQL)中的表a、表b、表c中的数据定时T+1增量的同步到B库(MySQL)。这里说明一下,不是数据库的主从备份,就是普通的数据同步。经过技术调研,发现Kettle挺合适的,原因如下:Kettle(数据抽取、清洗、转换、装载)是由java编写,可以在Window、Lin......
  • windows环境下使用Jenkins部署.net core
    前言之前学习了windows环境下使用Jenkins配置dotnetcore极简入门-chenxizhaolu-博客园(cnblogs.com)又学习了Windows下使用docker部署.NetCore-chenxizhaolu-博客园(cnblogs.com)现在将两者结合起来,通过Jenkins自动发布.netcore到Docker1、安装Jenkins参照windo......
  • 如何使用 Terraform 和 Git 分支有效管理多环境?
    作者|SumeetNinawe翻译|Seal软件链接|https://spacelift.io/blog/terraform-environments 通常我们使用Terraform将我们的基础设施定义为代码,然后用TerraformCLI在我们选择的云平台中创建制定的基础设施组件。从表面上看,整个过程看起来似乎不需要花费太多精力。然而当我......
  • 使用优启通 制作 WIN PE U盘时报BOOT.WIM 有毒的解决方法
    使用优启通制作WINPEU盘时报BOOT.WIM有毒的解决方法 1.打开“WindowsDefender”.2.点击“病毒和威胁防护”。3.点击“管理设置”。4.点击“添加或删除排除项”。5.将“EasyU_v3.7.exe”添加到排除即可。6.双击EasyU_v3.7.exe,开始制作U盘。 ......
  • 谷歌内核浏览器+Postman的快捷使用
    1.打开基于谷歌内核的360极速浏览器,选择课堂派登录的接口,Copy--CopyascURL(bash)02.打开本地安装的Postman工具,选择Collections--Import 03.将刚刚copy的cURL粘贴到这个输入框中,会自动跳转生成对应的接口 04.在原谷歌内核的浏览器该接口所有的请求相关的信息都c......
  • 直播平台制作,使用动画设置ProgressBar进度
    直播平台制作,使用动画设置ProgressBar进度布局文件: <?xmlversion="1.0"encoding="utf-8"?><LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-auto"  ......
  • django使用gunicorn框架,客户端请求耗时接口被中断问题
    项目使用的是django,使用了gunicorn作为动态web服务,使用的是supervisor作为进程管理工具。由于特殊原因,最近上线了一个非常耗时的http接口,一段时间后开始有用户陆续反馈他们的代码调用这个接口会返回502错误,经过一段时间的排查排除了网关的问题,确认是系统问题。经过......
  • 001.SQL的@@ROWCOUNT使用
    在线演示:http://v.youku.com/v_show/id_XMzMyMTg3MzI4.html演示下载:http://115.com/file/antb46tj演示重点SQL的系统变量@@ROWCOUNT返回的是上一语句影响的行数。最早的时候,我很自然的认为这个被影响的行数应该是类似于INSERT、UPDATE、DELETE这样的语句。因为,它们很......
  • Java 中 BigDecimal 类型的变量的使用
    BigDecimal类的作用:Java的BigDecimal类用于进行高精度的十进制运算,避免了使用浮点数造成的精度丢失问题。 BigDecimal提供了许多方法来执行基本的数学运算,如加减乘除、比较、区域等。 BigDecimal类的常见用法示例:1、创建BigDecimal对象:BigDecimalnumber=......
  • elecrton 中使用jquery
    其他库都行,就是jquery需要额外配置参考:https://blog.csdn.net/sinat_28734889/article/details/77869455引入jquery后判断<scriptsrc="https://code.jquery.com/jquery-2.2.0.min.js"></script><script>if(typeofmodule==='object'){window.jQ......