C# 在给定的示例中,操作代理指的是谁?

C# 在给定的示例中,操作代理指的是谁?,c#,generics,delegates,C#,Generics,Delegates,##主功能## 由于lambda表达式而由编译器创建的方法 我正在学习行动委托。我的第一个问题是关于主函数中使用的“action”变量。它是指由编译器生成的特殊方法吗? 我想问的另一个问题是,将Action与ClassName一起使用的原因是什么。在学习过程中,我主要看到了Action int、string等示例。当我们将此类参数引用到Action时,它指的是具有int和string参数的方法。我不知道为什么我们需要将类名传递给Action。谢谢你的指导 之所以提供类名,是因为它是泛型类,称为泛

##主功能##

由于lambda表达式而由编译器创建的方法 我正在学习
行动
委托。我的第一个问题是关于主函数中使用的“action”变量。它是指由编译器生成的特殊方法吗?
我想问的另一个问题是,将Action与ClassName一起使用的原因是什么。在学习过程中,我主要看到了Action int、string等示例。当我们将此类参数引用到Action时,它指的是具有int和string参数的方法。我不知道为什么我们需要将类名传递给Action。谢谢你的指导

之所以提供类名,是因为它是泛型类,称为泛型参数

其背后的原因是要知道传递给操作的参数类型,因此以后可以使用
x1.SchoolMethod
类中定义的方法invocations。否则,编译器会用错误来抱怨它


阅读。

您之所以提供类名,是因为它是泛型类,称为泛型参数

其背后的原因是要知道传递给操作的参数类型,因此以后可以使用
x1.SchoolMethod
类中定义的方法invocations。否则,编译器会用错误来抱怨它

了解

行动a2=()=>第三(50)

上述代码行将创建一个新的无参数方法,该方法执行第三个(50)方法。假设该无参数方法的名称为SomeSpecialName。基本上,我只想在这个例子和我之前提出的问题中创建一个类比。在本例中,a2将引用将执行第三个(50)的无参数方法。因此,通过同样的类比,我们可以说问题的主要方法中的变量“action”也指由编译器创建的方法吗。让我们把它命名为“特殊方法,它引用了”。此特殊方法引用的将采用一个类型为School的参数

行动a2=()=>第三(50)


上述代码行将创建一个新的无参数方法,该方法执行第三个(50)方法。假设该无参数方法的名称为SomeSpecialName。基本上,我只想在这个例子和我之前提出的问题中创建一个类比。在本例中,a2将引用将执行第三个(50)的无参数方法。因此,通过同样的类比,我们可以说问题的主要方法中的变量“action”也指由编译器创建的方法吗。让我们把它命名为“特殊方法,它引用了”。此特殊方法引用的将采用一个类型为School的参数

action变量是否引用了SpecialMethodToWhichActionReferences方法?@chaudhry否,为什么会这样?您需要编写类似于haccationreference的
Action-Action=specialmethodAction-Action=specialmethodvar action = new Action<School>((x1) => 
                { Console.WriteLine("Hello School");
                    x1.SchoolMethod(22);
                    x1.SchoolMethod2(33, "Second Method");
                });
                action.Invoke(new School());
class School
    {
        public void SchoolMethod(int x)
        {
            Console.WriteLine($"{x}");
        }
        public void SchoolMethod2(int x,string str)
        {
            Console.WriteLine($"SchoolMethod2 {x} {str}");
        }
}
private static void SpecialMethodToWhichActionRefers(School school)
        {
            school.SchoolMethod(13);
            school.SchoolMethod2(22,"Bob");
        }
class Program
    {
        static void Main(string[] args)
        {
            Action a2 = () => Third(50);
            a2.Invoke();
        }
        public static void Third(int x)
        {
            Console.WriteLine("Third invoked");
            int result;
            result = 3 + x;
            Console.WriteLine(result);
        }
        private static void SomeSpecialName()
        {
            Third(50);
        }
    }