gpt4 book ai didi

c# - 将方法作为传入方法的零个或多个参数作为参数传递?

转载 作者:太空宇宙 更新时间:2023-11-03 19:16:08 25 4
gpt4 key购买 nike

我正在尝试编写我称之为“触发器”的代码。他们采用一个对象、一个函数和某种激活条件。一旦激活,它就会在该对象上运行该方法。

Here's a basic stripped down example.它现在按预期工作。一个示例用法是:

SomeObject myObj = new SomeObject();
MyTrigger trigger = new MyTrigger(myObj, "Delete");
trigger.Activate(); // calls myObj.Delete();

现在我用 null 调用 Invoke 的地方是参数通常可以到达的地方(我认为)。我遇到的问题是在函数声明中将“零个或多个参数”作为单个参数。创建 MyTrigger 时我需要第三个参数,它是在 Invoke 期间传递的参数。

或者有更好的方法吗? IE。我能以某种方式将对象、函数调用和参数作为单个参数传递吗?也许两个参数?

最佳答案

你必须使用委托(delegate)。

// rewrite your trigger constructor like this
class MyTrigger<TTarget>
{
public MyTrigger(TTarget target, Action<TTarget> action);
public void Activate()
{
this._action(this._target);
}
}

// now call it with or without parameters
SomeObject myObj = new SomeObject();
var trigger = new MyTrigger<SomeObject>(myObj, o => o.Delete(1234));
trigger.Activate();

您还可以创建一个静态帮助程序类,使创建代码的编写稍微简单一些:

static class MyTrigger
{
public MyTrigger<TTarget> Create<TTarget>(TTarget target, Action<TTarget> action)
{
return new MyTrigger<TTarget>(target, action);
}
}

// now write the initialization code like this (you don't have to specify the type parameter anymore):
var trigger = MyTrigger.Create(myObj, o => o.Delete());

关于c# - 将方法作为传入方法的零个或多个参数作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com