首页 > 编程知识 正文

化学元素,c语言语法大全手册

时间:2023-05-05 03:57:58 阅读:117087 作者:1753

委托的存在可能需要将一个函数作为另一个函数的参数,这种情况下使用的委托机制

请求用关键字delegate声明,他实际定义了“函数类型”,明确规定了函数参数类型和返回值类型。 (也就是说,无参数无返回值的请求只能接受无参数无返回值的方法,反之亦然,)

声明委托

在C#中,将类分为两个阶段使用。 首先,定义此类,告诉编译器它由哪些字段和方法组成,然后使用该类实例化对象。 如果我们使用委托,也需要经过这两个阶段,首先定义委托,告诉编译器此委托可以指向什么类型的方法,然后创建该委托的实例

委托的语法如下:

Delegatevoidmethodinvoker(intx;

我定义了一个名为MethodInvoker的请求,该请求可以指向什么类型的方法?

此方法需要int类型的参数,方法的返回值为void。

定义要委托定义的方法的参数和返回值,并使用关键字delegate进行定义。

定义委托的其他情况:

delegatedoubletwolongop (长第一,长第二);

delegate字串geta字串(;

. NET编译器会严格检查函数类型与未完成的类型是否匹配,如果不完全匹配,则无法将转换后的请求实例作为参数传递给调用的函数。

通过使用委托,可以将函数作为参数,提高程序的通用性。 委托关键字的delegate声明实际上是创建的。 委托相当于创建从System.Delegate派生的类。 类具有调用列表,列表包含对委托函数的引用,与c的函数指针相比,委托是一种类型安全的方法。

一个小例子:

用户系统; namespace委托{ class Program { //委托返回值string类型的定义,无参数privatedelegatestringgetastring (; staticvoidmain(string[]args ) )//================构造函数使用请求===========string res=str (; //请求类型调用方法console.writeline(RES ); //==================直接赋值法是委托==============getastringstr1==x.tostringstr string res1=str1.Invoke (; 从invoke方法调用str1引用的方法//string res1=str1(; //一样。 控制台. writeline (RES ); //示例:将委托用作参数GetAString getastring=GetName; console.writeline (geta字符串) ); getastring=GetAge; console.writeline (geta字符串) ); 控制台. read key (; }静态字符串GetName () { string str='这是GetName方法'; 返回str; }静态string GetAge () { string str='这是get age方法'; 返回str; }}委托系统定义:

除了我们自己定义的委托外,系统还为我们提供内置的委托类型,Action和Func

Action委托引用void返回类型的方法,t表示方法参数,首先查看Action委托中存在什么

操作委托示例

namespace Action委托{ class program { staticvoidmain (string [ ] args )//无返回值、无参数的方法Action method1=Show;

method1(); //利用泛型,定义没有返回值,带参数的委托 Action<string> method2 = Show; method2("CZHENYA"); //系统会自动识别重载方法,,Action可以通过泛型来添加参数(最多支持16个参数),但是一定没有返回值 Console.ReadLine(); } static void Show() { Console.WriteLine("Hello Czhenya"); } static void Show(String name) { Console.WriteLine("HELLO"+name); } }}

Func引用了一个带有一个返回值的方法,它可以传递0或者多到16个参数类型,和一个返回类型

//func委托实例namespace Func委托{ class Program { static void Main(string[] args) { //func 中的泛型是指定的方法的返回值类型,, Func<int> method = Show1; Console.WriteLine("方法的返回值是:"+ method()); //func 中的泛型是最后一个类型必须是函数的返回值类型,前面的是方法参数类型可以输入(0-16) Func<int,string> method1 = Show2; Console.WriteLine(method1(20)); Console.ReadKey(); } static int Show1() { return 111; } static string Show2(int age) { Console.WriteLine(age); return "Czhenya"; } }}

多播委托

多播委托:我们把包含多个函数的委托称为多播委托(Muiticast Delegate),所有被委托函数的引用都存储在多播委托类的调用列表中,当调用多播委托时,会按顺序依次调用列表中的所有函数。
向多播委托中注册函数的语法为:
通过+=运算符向多播委托中注册函数
从多播委托中删除函数的语法:使用-=运算符,,
注:多播委托只能得到调用的最后一个方法的结果,一般多播委托的返回值只能是void ,,,

namespace 多播委托{ class Program { static void Main(string[] args) { //多播委托 Action method = Text1; method += Text2; //method(); //method -= Text1; //当委托没有指向任意一个方法的时候,会报出异常,,, //获得委托中的所有方法 Delegate[] delegates = method.GetInvocationList(); //遍历出来,挨个调用 foreach (Delegate item in delegates) { //item(); item.DynamicInvoke(); } Console.ReadKey(); } static void Text1() { Console.WriteLine("Text1"); } static void Text2() { Console.WriteLine("Text2"); } }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。