【发布时间】:2012-06-29 05:03:30
【问题描述】:
几年前,Eric Lippert blogged 谈到了一个假设的 infoof 运算符,它允许您在编译时而不是运行时获取方法/属性信息。基本上说这是一匹不错的小马,但没有独角兽....
我读过一些关于 Rosyln 在编译时重写代码的能力,使用 Roslyn 实现 infoof 有多难?
编辑:我认为这可能是获得 Eric 所说的他们正在考虑的所有内容的一种方式,但我应该稍微分解一下这些功能以防万一。
- 获取属性名称。
- 获取属性类型。
- 获取属性访问器。
- 获取方法名称。
- 通过 infoof 获取他所指的一切......
以重构安全的方式,在编译时得到验证。就我个人而言,1 涵盖了我实际使用的大约 90%(用于获取呼叫者姓名的新呼叫者信息属性实际上可以涵盖大约 60%,但当然,如果有一种方法可以在该方法的内部和外部工作,那会更好)。
【问题讨论】:
-
我怀疑这是可能的。使用
typeof,运算符参数被明确定义并且没有歧义(只有一种类型具有特定的名称和类型参数,撇开命名空间问题不谈)。但是,infoof如何区分例如void MyFunc(string arg)和void MyFunc(int arg)? -
Eric 在他的博客文章中提供了一种可能的语法来区分这些语法,尽管对于一些令人讨厌的情况仍然不够。
-
只需创建一个委托并获取
Target。 -
@leppie 如何“创建”一个委托给属性设置器或获取器?
-
@leppie: nameof 用于获取属性名称并在编译时工作。