たとえば、オプションのパラメータを含むClassA
メソッドがあります。Foo
したがって、メソッドに示すように使用できますDoFoo
。
public class ClassA
{
public ClassA() { }
public void Foo(bool flag = true)
{
}
public void DoFoo()
{
Foo(); // == Foo(true);
}
}
一度それを別のクラスに渡す必要がありましたClassB
。最初にそれをとして渡そうとしましAction
たが、署名は確かに一致しませんでした。次に、それをとして渡しましAction<string>
た。署名は一致しましたが、のパラメーターはClassB
オプションではなくなりました。しかし、私はそれをオプションにしたいので、デリゲートを宣言することを思いつきました。だから、それはうまくいきました。
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);
}
したがって、問題は、デリゲートを明示的に宣言せずに、オプションのパラメーターを引数として持つメソッドを渡して、そのパラメーターのオプションの品質を維持できるかどうかです。