none
在实体类中的任意属性的set内调用一个静态方法,在该方法内要获得属性名称,但是其参数不能写明是字段的字符串名称,怎么做到? RRS feed

  • 问题

  • 在实体类中的任意属性的set内调用一个访问权限为private的静态方法,在该方法内要获得属性名称,但是其参数不能写明是某个字段的字符串名称,怎么做到?


    2019年3月10日 1:02

全部回复

  • 使用CallerMemberNameAttribute 就可以做到

    參考 Microsoft Docs CallerMemberNameAttribute Class  

    我猜想你應該是為了在 WPF 程式中實作 INotifyPropertyChanged 介面,程式碼約莫是長這樣

       public abstract class NotifyPropertyBase : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
           
            protected void SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
            {
                if (!object.Equals(storage, value))
                {
                    storage = value;
                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
                }
            }
    
        }

    ViewModel 就可以這樣用

       public class MainViewModel : NotifyPropertyBase
        {
            private string _name;
            public string Name
            {
                get { return _name; }
                set { SetProperty(ref _name, value); }
            }
    
            private int _age;
            public int Age
            {
                get { return _age; }
                set { SetProperty(ref _age, value); }
            }
        }

     

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/




    2019年3月10日 20:47