Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过委托实例调用具有可选参数的方法_C#_Delegates_Instance Variables_Optional Parameters - Fatal编程技术网

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) { ... }

你不能那样做。委托签名只知道自己的参数,就像接口一样,而不知道委托实现。如果不想复制代码,可以让代理签名接受可选字符串,并从实际方法实现中删除可选字符串。

您不能这样做。委托签名只知道自己的参数,就像接口一样,而不知道委托实现。如果不想复制代码,可以让代理签名接受可选字符串,并从实际方法实现中删除可选字符串。

可能重复的可能重复的