C# 通过委托实例调用具有可选参数的方法
我们知道,我们可以通过使用委托引用方法,也可以通过调用委托的实例来调用方法 我想通过调用委托实例来调用具有可选参数的方法 我的代码在下面C# 通过委托实例调用具有可选参数的方法,c#,delegates,instance-variables,optional-parameters,C#,Delegates,Instance Variables,Optional Parameters,我们知道,我们可以通过使用委托引用方法,也可以通过调用委托的实例来调用方法 我想通过调用委托实例来调用具有可选参数的方法 我的代码在下面 using System; namespace Testing_Delegates { class Program { delegate void Order(string abc); public static void ReverseOrder(string rev = "Optional Param")
using System;
namespace Testing_Delegates
{
class Program
{
delegate void Order(string abc);
public static void ReverseOrder(string rev = "Optional Param")
{
char[] elements = rev.ToCharArray();
char[] reversed = new char[rev.Length];
for(int i = 0; i < rev.Length; i++)
{
reversed[i] = elements[rev.Length - (i+1)];
}
foreach(char element in reversed)
{
Console.Write(element);
}
}
static void Main(string[] args)
{
Order changeorder = new Order(ReverseOrder);
changeorder();//------Here is error------------
}
}
}
错误是
没有给出与“Program.Order”的必需形式参数“abc”对应的参数
委托的签名需要设置一个参数。您需要为字符串abc提供值,并像这样调用:
changeorder.Invoke("hello world");
委托的签名需要设置一个参数。您需要为字符串abc提供值,并像这样调用:
changeorder.Invoke("hello world");
也向委托添加默认值,如
delegate void Order(string abc = "Optional Parameter");
也向委托添加默认值,如
delegate void Order(string abc = "Optional Parameter");
您需要您的委托签名来支持可选参数,目前您的方法签名和委托签名不相同:
delegate void Order(string abc="");
您需要您的委托签名来支持可选参数,目前您的方法签名和委托签名不相同:
delegate void Order(string abc="");
要使其正常工作,还需要将可选参数添加到委托声明中。代表的声明应为:
delegate void Order(string abc = "Optional Param");
默认字符串可以是任何编译常量字符串值
还应该提到,这样做意味着ReverseOrder方法不需要有可选参数。可声明为:
public static void ReverseOrder(string rev) { ... }
要使其正常工作,还需要将可选参数添加到委托声明中。代表的声明应为:
delegate void Order(string abc = "Optional Param");
默认字符串可以是任何编译常量字符串值
还应该提到,这样做意味着ReverseOrder方法不需要有可选参数。可声明为:
public static void ReverseOrder(string rev) { ... }
你不能那样做。委托签名只知道自己的参数,就像接口一样,而不知道委托实现。如果不想复制代码,可以让代理签名接受可选字符串,并从实际方法实现中删除可选字符串。您不能这样做。委托签名只知道自己的参数,就像接口一样,而不知道委托实现。如果不想复制代码,可以让代理签名接受可选字符串,并从实际方法实现中删除可选字符串。可能重复的可能重复的