在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)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1269370.html