C# 使用委托简化函数调用
我有一个布尔函数,它用于许多其他函数的决策。每一次,用户要么得到一个消息框,要么被允许继续,这取决于该函数的返回值。因此,我的伪代码可能如下所示:C# 使用委托简化函数调用,c#,C#,我有一个布尔函数,它用于许多其他函数的决策。每一次,用户要么得到一个消息框,要么被允许继续,这取决于该函数的返回值。因此,我的伪代码可能如下所示: private bool IsConsented() { //some business logic } private void NotReal() { if (IsConsented()) { //call function A } else { MessageBo
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.");
}
}
这样我就可以传递一个指向函数的指针。我很怀疑这与委托有关,但我不知道语法,也不知道如何使用委托传递参数。您需要声明委托或使用内置委托,例如操作:
private void CheckConsent(Action action)
{
if (IsConsented())
{
action();
}
else
{
MessageBox.Show("Need consent first.");
}
}
然后你可以做:
private void NotReal()
{
this.CheckConsent( () =>
{
// Do "NotReal" work here...
});
}
您需要声明委托或使用内置委托,例如操作:
private void CheckConsent(Action action)
{
if (IsConsented())
{
action();
}
else
{
MessageBox.Show("Need consent first.");
}
}
然后你可以做:
private void NotReal()
{
this.CheckConsent( () =>
{
// Do "NotReal" work here...
});
}
里德·科普西的做法是干净的。它使用已定义的动作委托和lambda表达式。但如果你对此感到不舒服,这里是老办法
private delegate void realDelegate();
realDelegate d = new realDelegate(NotReal);
你现在可以打电话了
private void CheckConsent(realDelegate d)
{
if(d !=null)
d();
}
里德·科普西的做法是干净的。它使用已定义的动作委托和lambda表达式。但如果你对此感到不舒服,这里是老办法
private delegate void realDelegate();
realDelegate d = new realDelegate(NotReal);
你现在可以打电话了
private void CheckConsent(realDelegate d)
{
if(d !=null)
d();
}
我认为你的计划是正确的。查看Microsoft提供的这篇介绍学员基本知识的文档。迈克是对的。您可能首先需要了解代理的基本知识。学习基础知识。你自己试试这个问题。与他人发布的解决方案进行比较。然后你应该试试里德·科佩(Reed Copsey)用动作委托和lambda表达式给出的答案。我认为你的答案是正确的。查看Microsoft提供的这篇介绍学员基本知识的文档。迈克是对的。您可能首先需要了解代理的基本知识。学习基础知识。你自己试试这个问题。与他人发布的解决方案进行比较。然后,您应该尝试Reed Copsey发布的答案,使用动作委托和lambda表达式。