将方法作为参数发送到另一个方法(说明)
Send method as the parameter to another method (clarification)
我知道这个问题已经以多种形式被问过很多次,但现在我想澄清一些事情。
2种方法:默认方法和附加方法。首先我们执行默认方法和基本操作。然后,如果将其他方法作为参数传递给默认方法,也执行它。
???void Default_Method(???Additional_Method)
{
//default logic
//after default logic, call additional method if its name was specified
??? - how to call the specified additional method
}
???void Additional_Method()
{
//additional logic
}
...
还有现在最有意思的地方
protected void Page_Load(object sender, EventArgs e)
{
Default_Method(???Additionl_Method???) //here I need to pass Additional_Method as a parameter
}
问题:
如何正确声明方法。我用 ??? 标记了要澄清的地方。
以及如何让附加方法成为默认方法的可选参数?不需要的时候传Null就够了吗?
这个问题的原因
我没有找到关于如何操作的一般说明。所有示例都充满了具体细节,人们在给方法命名时会使用自己的理解,并且在他们的示例中不太清楚哪一个做了什么,这就是为什么我决定创建具有中性名称的线程。
恕我直言,最好使用操作:
void Additional_Method()
{
}
void Default_Method(Action a)
{
a.Invoke();
}
在您的主要代码中使用
Default_Method(Additional_Method);
void Default_Method(Action additionalMethod = null)
{
//default logic
//after default logic, call additional method if its name was specified
//This if is needed to avoid NullReferenceException
if (additionalMethod != null)
additionalMethod();
}
void Additional_Method()
{
//additional logic
}
protected void Page_Load(object sender, EventArgs e)
{
Default_Method(Additional_Method);
//OR
Default_Method();
//OR
Default_Method(null);
//OR
Default_Method(() => { /*Do something*/});
}
在此示例中,我假设这两种方法都在与 Page_Load
相同的 class 中定义。
我知道这个问题已经以多种形式被问过很多次,但现在我想澄清一些事情。
2种方法:默认方法和附加方法。首先我们执行默认方法和基本操作。然后,如果将其他方法作为参数传递给默认方法,也执行它。
???void Default_Method(???Additional_Method)
{
//default logic
//after default logic, call additional method if its name was specified
??? - how to call the specified additional method
}
???void Additional_Method()
{
//additional logic
}
...
还有现在最有意思的地方
protected void Page_Load(object sender, EventArgs e)
{
Default_Method(???Additionl_Method???) //here I need to pass Additional_Method as a parameter
}
问题:
如何正确声明方法。我用 ??? 标记了要澄清的地方。
以及如何让附加方法成为默认方法的可选参数?不需要的时候传Null就够了吗?
这个问题的原因
我没有找到关于如何操作的一般说明。所有示例都充满了具体细节,人们在给方法命名时会使用自己的理解,并且在他们的示例中不太清楚哪一个做了什么,这就是为什么我决定创建具有中性名称的线程。
恕我直言,最好使用操作:
void Additional_Method()
{
}
void Default_Method(Action a)
{
a.Invoke();
}
在您的主要代码中使用
Default_Method(Additional_Method);
void Default_Method(Action additionalMethod = null)
{
//default logic
//after default logic, call additional method if its name was specified
//This if is needed to avoid NullReferenceException
if (additionalMethod != null)
additionalMethod();
}
void Additional_Method()
{
//additional logic
}
protected void Page_Load(object sender, EventArgs e)
{
Default_Method(Additional_Method);
//OR
Default_Method();
//OR
Default_Method(null);
//OR
Default_Method(() => { /*Do something*/});
}
在此示例中,我假设这两种方法都在与 Page_Load
相同的 class 中定义。