比如说,我们有一个包含可选参数ClassA
的方法。Foo
因此,我们可以按照方法中所示使用它DoFoo
。
public class ClassA
{
public ClassA() { }
public void Foo(bool flag = true)
{
}
public void DoFoo()
{
Foo(); // == Foo(true);
}
}
一旦我需要将它传递给另一个班级ClassB
。首先,我尝试将其传递为Action
,但签名肯定不匹配。然后我将它作为 传递Action<string>
,签名匹配,但参数 inClassB
不再是可选的。但我确实想让它成为可选的,并想出了一个想法来声明一个代表。所以,它奏效了。
public delegate void FooMethod(bool flag = true);
public class ClassB
{
Action<bool> Foo1;
FooMethod Foo2;
public ClassB(Action<bool> _Foo1, FooMethod _Foo2)
{
Foo1 = _Foo1;
Foo2 = _Foo2;
}
public void DoFoo()
{
Foo1(true);
Foo2(); // == Foo2(true);
}
所以,问题是:我能否以某种方式将带有可选参数的方法作为参数传递,而不显式声明委托并保持其参数的可选质量?