委托_deleget

Posted jeely

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了委托_deleget相关的知识,希望对你有一定的参考价值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

/*
 
            //由框架提供的委托类型
            //无返的
            Action act0 = () => Console.WriteLine("无参无返");
            Action<int> act1 = x => Console.WriteLine("1 参无返");
            Action<int, int> act2 = (x, y) => Console.WriteLine("2 参无返");
            //有返的
            Func<string> func0 = () => "无参有返";
            Func<int, string> func1 = x => "1 参有返";
            Func<int, double, string> func2 = (x, y) => "多参有返";

     */

namespace 委托_deleget


    //  1、声明委托
    //就声明方法模版加 deleget 修饰
    //就是把方法转义成类,同时指定这个类的使用规则,如 返、参的类型或数量

    public delegate void nRnC();
    public delegate int hRnC();
    delegate string hRhC(string a, int b);


    class Program
    
        //  2、定义供委托调用的方法
        private static void for_nRnC_1()  Console.WriteLine("for_nRnC_1"); 
        private static void for_nRnC_2()  Console.WriteLine("for_nRnC_2"); 
        private static string for_hRhC(string a, int v)
        
            string temp = null;
            for (int i = 0; i < v; i++)
            
                temp += a;
            
            return temp;
        


        static void Main(string[] args)
        
            //  3、实例化委托对象,它包括一个调用方法列表

            //无参无返
            nRnC myDeleget_nRnC = new nRnC(for_nRnC_1);
            //有参有返,
            hRhC myDeleget_hRhC = new hRhC(for_hRhC);

            //  4、使用(执行)委托

            // nRnC
            myDeleget_nRnC.Invoke();

            //hRhC
            string ret = myDeleget_hRhC("batu", 5);
            Console.WriteLine(ret);

            //多波委托,返回值为最后一个方法的返回值
            myDeleget_nRnC += for_nRnC_2;
            myDeleget_nRnC -= for_nRnC_2;

            Console.Read();
        
    

    //事件_Event

    class EventTest
    
        void doSomeThing()
        
            ForEvent myTest = new ForEvent();
            myTest.shijian += MyTest_shijian;
            //myTest.shijian = MyTest_shijian;
            //myTest.shijian();
            myTest.weituo = MyTest_shijian;
            myTest.weituo();
        

        private void MyTest_shijian() ; ; ; 
    

    class ForEvent
    
        //这是一个属性,可以直接赋值和执行
        //相当于把类内部的方法直接暴露出来
        public nRnC weituo  set; get; 

        //这是一个事件,只能 += 或 -= 且不能从外部调用
        //Event 的用作是,控制对象的权限,
        //在外部只能向这个事件上挂方法或删方法,不能执行,也不能改变原有方法
        public event nRnC shijian;
    

  

以上是关于委托_deleget的主要内容,如果未能解决你的问题,请参考以下文章

C#委托和事件框架封装简写 delegateeventActionEventHandler

C#委托和事件框架封装简写 delegateeventActionEventHandler

C#委托和事件框架封装简写 delegateeventActionEventHandler

对“xxx”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。 错误解决一例。(代码片段

2017 CVTE Windows开发一面 3.7

这些 C++ 代码片段有啥作用?