我正在反思某个类型的属性,并想检查某个属性是否同时具有 public setter和getter。遗憾的是,PropertyInfo
的{{1}}和CanRead
并未指明可访问性级别。所以我转向CanWrite
,其interesting description(强调我的):
返回一个数组,其元素反映当前实例反映的属性的公共get,set和其他访问者。
那里有什么“其他配件”?是否存在其他访问者的可能性,或者是否存在实际上比属性的简单set / get duo更多的CLI语言?
答案 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)
Events有add
和remove
个访问者来注册代表(这就是+=
被转换为的内容。)
编辑:好的,它们与属性关系不大,但它们属于“其他访问者”类别。有趣的是,EventInfo
只有GetAddMethod
和GetRemoveMethod
等方法。此外,有GetOtherMethod
和GetRaiseMethod
,但这是更黑暗的魔法,我不太了解......