【发布时间】:2016-10-18 19:43:31
【问题描述】:
我对 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 调用。
知道如何实现这一目标吗?
【问题讨论】:
-
这些是实例方法还是静态方法?您将它们描述为好像它们是实例方法,但该示例看起来更像是静态方法。 minimal reproducible example 在这里真的很有帮助。
-
不幸的是它们不是静态方法,我不能让它们成为静态方法。也许这个例子不起作用,我没有尝试:我只是粘贴了一些在这里找到的东西,似乎创建了一个函数句柄列表。
-
所以请更新您的问题以将它们显示为实例方法,遵循清晰的 .NET 命名约定。
-
这样更好吗?
-
不是真的,因为它仍然不是我之前要求的minimal reproducible example。但我怀疑 SledgeHammer 的答案就是你所追求的......这就是为什么我要问它们是否是实例方法开始的原因。下次您提出问题时,请务必牢记这一切 - 您越清楚,最好是举例说明,您可能越快获得帮助。
标签: c# function function-handle