我有一个布尔函数,用于许多其他函数的决策。并且每次都向用户提供消息框或允许其继续,具体取决于该函数的返回值。所以我的伪代码可能如下所示:
private bool IsConsented()
{
//some business logic
}
private void NotReal()
{
if (IsConsented())
{
//call function A
}
else
{
MessageBox.Show("Need consent first.");
}
}
private void NotReal2()
{
if (IsConsented())
{
//call function B
}
else
{
MessageBox.Show("Need consent first.");
}
}
我正在寻找一种更简单的方法,而不是将if-else逻辑硬编码到我的每个函数中。我希望能够有这样的功能:
private void CheckConsent(function FunctionPointer)
{
if (IsConsented())
{
//call the function
FunctionPointer();
}
else
{
MessageBox.Show("Need consent first.");
}
}
这样我就可以传递指向函数的指针。我真的怀疑这与委托有关,但我不知道语法,我不明白如何使用委托来传递参数。
答案 0 :(得分:5)
您需要声明委托(或使用内置的代理,例如Action):
private void CheckConsent(Action action)
{
if (IsConsented())
{
action();
}
else
{
MessageBox.Show("Need consent first.");
}
}
然后你可以这样做:
private void NotReal()
{
this.CheckConsent( () =>
{
// Do "NotReal" work here...
});
}
答案 1 :(得分:0)
Reed Copsey的做法是干净的。它使用已经定义的Action委托和lambda表达式。但如果你对此感到不舒服,那就是旧的做法。
private delegate void realDelegate();
realDelegate d = new realDelegate(NotReal);
您现在可以致电
private void CheckConsent(realDelegate d)
{
if(d !=null)
d();
}