获取尚未实例化的类的函数的句柄

本文关键字:句柄 函数 实例化 获取 | 更新日期: 2023-09-27 18:13:41

我对c#相当陌生。

我想做的事情可能看起来很复杂。首先,我想要获取一些函数的句柄,以便稍后执行它们。我知道我可以通过以下方式实现这一点:

List<Action> list = new List<Action>();
list.Add( () => instanceA.MethodX(paramM) );
list.Add( () => instanceA.MethodY(paramN, ...) );
for(Action a in list) {
    a();
}

但是,如果instanceA对象还不存在,但是当我调用相应的函数时,我知道它将存在,该怎么办?MethodX和MethodY是一个外部库,我不应该修改。

-why:考虑这种情况:类A有100个方法,每个方法根据类A的状态返回一个不同的浮点数。然而,根据其他一些状态,我们可能只希望访问前5个方法,或者只访问第一个和第四个方法。此方法所应用的类状态可能随时间而改变。我的想法是创建一个包含所有100个方法的大列表,然后通过使用与该方法对应的索引,创建一个仅包含适当方法的子列表LL(例如,[1,2,3,4,5]或[1,4])。然后,一旦对象A被创建,我将依次运行子列表LL中所有不同的方法,就像它们被对象A调用一样。

有什么办法吗?

获取尚未实例化的类的函数的句柄

您可以使用List<Action<YourClass>>,然后添加如下:

lst.Add(x => x.Method1());
lst.Add(x => x.Method2());

当你想执行你在实例中传递的方法时:

lst[0](theInstance);