获取方法调用方设置“函数”
本文关键字:函数 设置 方法 调用 方设置 获取 | 更新日期: 2023-09-27 18:26:43
获取
方法调用器非常简单,甚至可以使用编译器服务更改属性名称,如下所示:
public class EmployeeVM:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string propertyName=null)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
// The compiler converts the above line to:
// RaisePropertyChanged ("Name");
}
}
private string _phone;
public string Phone
{
get { return _phone; }
set
{
_phone = value;
OnPropertyChanged();
// The compiler converts the above line to:
// RaisePropertyChanged ("Phone");
}
}
}
但是是否可以从集合本身内部获取"set"函数的调用者?我不知道你如何在语法上定义它。又名,谁在打电话 电话= ?
看看 StackFrame,特别是给你方法名称的 GetMethod(你需要选择一个以前的堆栈帧,这取决于是否编写帮助函数来这样做(。文章示例:
StackTrace st = new StackTrace();
StackTrace st1 = new StackTrace(new StackFrame(true));
Console.WriteLine(" Stack trace for Main: {0}",
st1.ToString());
Console.WriteLine(st.ToString());
通过搜索 StackFrame 可以找到其他类似的问题,例如如何找到当前函数调用者的对象实例的类型?
不幸的是[CallerMemberName]
AttributeUsage设置为AttributeTargets.Parameter
,所以它只能用于参数,就像在方法签名中一样
但是您可以使用Alexei Levenkov
提到的StackFrame
public string Phone
{
get { return _phone; }
set
{
string setterCallerName = new StackFrame(1).GetMethod().Name;
_phone = value;
OnPropertyChanged();
}
}