Soh*_*amC 11 c# delegates func
我有这种功能
void func(params object[] parameters) {
//Function Body
}
Run Code Online (Sandbox Code Playgroud)
它可以接受以下类型的参数
func(10, "hello", 30.0);
func(10,20);
Run Code Online (Sandbox Code Playgroud)
等等.
我想Action为上面的函数创建一个委托.可能吗?如果不是那么为什么?
Jon*_*eet 16
您不能使用现有的Action委托params,但您可以这样声明自己的委托:
public delegate void ParamsAction(params object[] arguments)
Run Code Online (Sandbox Code Playgroud)
然后:
// Note that this doesn't have to have params, but it can do
public void Foo(object[] args)
{
// Whatever
}
...
ParamsAction action = Foo;
action("a", 10, 20, "b");
Run Code Online (Sandbox Code Playgroud)
当然你可以Action<object[]>为你现有的方法创建一个- 但你失去了params它的方面,因为它没有被声明Action<T>.例如:
public static void Foo(params object[] x)
{
}
...
Action<object[]> func = Foo;
func("a", 10, 20, "b"); // Invalid
func(new object[] { "a", 10, 20, "b" }); // Valid
Run Code Online (Sandbox Code Playgroud)
因此,如果您从想要使用的代码调用委托params,则需要一个委托类型,其中包含声明中的委托类型(根据第一部分).如果你只是想创建它接受一个委托object[],那么你可以创建一个实例的Action<object[]>使用具有方法params在其签名-它只是一个修改器,有效.
| 归档时间: |
|
| 查看次数: |
11221 次 |
| 最近记录: |