除了'set'和'get'之外的其他属性访问器?

时间:2012-07-26 11:24:37

标签: .net clr

我正在反思某个类型的属性,并想检查某个属性是否同时具有 public setter和getter。遗憾的是,PropertyInfo的{​​{1}}和CanRead并未指明可访问性级别。所以我转向CanWrite,其interesting description(强调我的):

  

返回一个数组,其元素反映当前实例反映的属性的公共get,set和其他访问者

那里有什么“其他配件”?是否存在其他访问者的可能性,或者是否存在实际上比属性的简单set / get duo更多的CLI语言?

2 个答案:

答案 0 :(得分:5)

实际上,只有一个吸气剂和二传手。从技术上讲,IIRC CLI规范(ECMA 335第1.8.11.3节)并没有限制只是这些,所以其他一些语言可以自由添加其他含义,但实际上没有其他意义。

这显示在表II.17中,并使用IL中的.other标题(注意,getter为.get,setter为.set,{{1}对于属性)。

修改

特别是,请注意规范中包含的示例:

.custom

建议“重置”是一个选项;然而,实际上这是通过反射模式处理的;所以:

  // the declaration of the property 
  .property int32 Count() { 
    .get instance int32 MyCount::get_Count() 
    .set instance void MyCount::set_Count(int32) 
    .other instance void MyCount::reset_Count() 
  } 

约定 public int Foo {get;set;} public void ResetFoo()的重置方法,但编译器不会将其处理为自定义访问器。< / p>

Foo

答案 1 :(得分:1)

Eventsaddremove个访问者来注册代表(这就是+=被转换为的内容。)

编辑:好的,它们与属性关系不大,但它们属于“其他访问者”类别。有趣的是,EventInfo只有GetAddMethodGetRemoveMethod等方法。此外,有GetOtherMethodGetRaiseMethod,但这是更黑暗的魔法,我不太了解......