访问器
- 在反射中,索引器被归类为属性。
而索引器在声明时必须有参数。
所以想访问索引器必须通过获取他的访问器。 - 而属性的访问器也是可以访问的。属性是否是静态,是否是抽象,也是通过访问器来访问。
- 而事件的本质也是两个访问器。他控制的匿名委托无法通过事件来获得。
访问器是一个方法。在获取到访问器后,查看元数据,和调用方法的操作
和反射获取的普通方法是一样的。
以下是示例类
class TestClass
{
public int Id { get; set; }
public int this[int index]
{
get => index; set
{
Console.WriteLine(index);
}
}
public event Action Event;
}
获取访问器
PropertyInfo property = type.GetProperty("Id");
MethodInfo m1 = property.GetGetMethod();
MethodInfo m2 = property.GetSetMethod();
PropertyInfo item = type.GetProperty("Item");
MethodInfo m3 = item.GetGetMethod();
MethodInfo m4 = item.GetSetMethod();
EventInfo eventInfo = type.GetEvent("Event");
MethodInfo m5 = eventInfo.GetAddMethod();
MethodInfo m6 = eventInfo.GetRemoveMethod();
访问器本质
属性的访问器实际上是get_属性名
和set_属性名
两个方法。
而索引器是一个名为Item
的属性。
事件则是add_事件名
和remove_事件名
的两个方法。
这些访问器方法可以存在同名的成员。
唯独索引器存在时,不能存在一个名为Item的成员。