c#反射-获取属性,索引器,事件的访问器

访问器

  • 在反射中,索引器被归类为属性。
    而索引器在声明时必须有参数。
    所以想访问索引器必须通过获取他的访问器。
  • 而属性的访问器也是可以访问的。属性是否是静态,是否是抽象,也是通过访问器来访问。
  • 而事件的本质也是两个访问器。他控制的匿名委托无法通过事件来获得。

访问器是一个方法。在获取到访问器后,查看元数据,和调用方法的操作
和反射获取的普通方法是一样的。

以下是示例类

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的成员。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值