Csharp/C#教程:在C#中引用属性本身。 reflection? 通用? 类型?分享


在C#中引用属性本身。 reflection? 通用? 类型?

如果这个问题没有很好地制定,请耐心等待。 不知道是问题的一部分。

我想要完成的一个例子可以在WPF中的PropertyChangedEventArgs中找到。 如果要在WPF中标记属性已更改,则执行以下操作:

PropertyChanged(this, new PropertyChangedEventArgs("propertyName")); 

您将字符串传递给PropertyChangedEventArgs,它引用已更改的属性名称

您可以想象我不希望在我的代码中使用硬编码字符串作为属性名称。 当然,重构重命名错过了它,这使得它不仅在美学上没有吸引力,而且还容易出错。

不管怎样,我更愿意参考房产本身

 PropertyChanged(this, new PropertyChangedEventArgs(?SomeClass.PropertyName?)); 

看起来我应该能够用一个简短的方法来包装它,让我说出类似上面的内容。

 private void MyPropertyChanged(??) { PropertyChanged(this, new PropertyChangedEventArgs(??.ToString()??)); } ... so I can say something like: MyPropertyChanged(Person.Name); //where I'm interested in the property *itself* 

到目前为止,我正在画一个空白。

不幸的是,没有一种直接的方法可以做到这一点; 但是,您可以通过Expression在.NET 3.5中执行此操作。 请看这里了解更多。 要复制示例:

 PropertyInfo prop = PropertyHelper.GetProperty(x => x.Bar); 

(更改它以返回名称而不是PropertyInfo非常简单)。

同样,编写变体会非常简单:

 OnPropertyChanged(x=>x.Name); 

使用:

 OnPropertyChanged(Expression> property) {...} 

这是一个经常被请求的function,通常称为infoof(“info of”),它将返回与成员关联的reflection对象,例如

 PropertyInfo pi = infoof(Person.Name); 

遗憾的是,动态关键字正在吸收C#编译器团队的时间!

我非常有信心没有办法避免指定一个字符串 – 据我所知,C#或.NET中没有内置函数可以传递对属性的引用,并且将string传递给Reflection API是远远不够的是最简单的方法。

但是,在标准.NET之外,您可能会在PostSharp (面向方面​​的.NET编程)中找到您的解决方案,它允许您添加代码,以便在各种属性更改时自动引发事件,如您在问题中所示。

上述就是C#学习教程:在C#中引用属性本身。 reflection? 通用? 类型?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

www.ctvol.com true https://www.ctvol.com/cdevelopment/1269370.html Article Csharp/C#教程:在C#中引用属性本身。 reflection? 通用? 类型?分享

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1269370.html

(0)
上一篇 2022年11月20日
下一篇 2022年11月20日

精彩推荐