zoukankan      html  css  js  c++  java
  • C#基础之委托

    官网资料:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/delegates/

     /// <summary>
     /// 委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用
     /// 委托是安全封装方法的类型,类似于 C 和 C++ 中的函数指针。 与 C 函数指针不同的是,委托是面向对象的、类型安全的和可靠的。
    /// </summary> // Declare a delegate delegate void Del(int i, double j); class MathClass { static void Main() { MathClass m = new MathClass(); // Delegate instantiation using "MultiplyNumbers" Del d = m.MultiplyNumbers; // Invoke the delegate object. Console.WriteLine("Invoking the delegate using 'MultiplyNumbers':"); for (int i = 1; i <= 5; i++) { d(i, 2); } // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } // Declare the associated method. void MultiplyNumbers(int m, double n) { Console.Write(m * n + " "); } }
    // Declare a delegate
    delegate void Del();
    
    class SampleClass
    {
        public void InstanceMethod()
        {
            Console.WriteLine("A message from the instance method.");
        }
    
        static public void StaticMethod()
        {
            Console.WriteLine("A message from the static method.");
        }
    }
    
    class TestSampleClass
    {
        static void Main()
        {
            var sc = new SampleClass();
    
            // Map the delegate to the instance method:
            Del d = sc.InstanceMethod;
            d();
    
            // Map to the static method:
            d = SampleClass.StaticMethod;
            d();
        }
    }
    /* Output:
        A message from the instance method.
        A message from the static method.
    */
     public delegate void Del(string message);
        class TestDelegate
        {
            // Create a method for a delegate.
            public static void DelegateMethod(string message)
            {
                Console.WriteLine(message);
            }
    
            public static void Test()
            {
                // Instantiate the delegate.
                Del handler = DelegateMethod;
    
                // Call the delegate.
                handler("Hello World");
            }
    
            public static void MethodWithCallback(int param1,int param2,Del callback)
            {
                callback("The number is: " + (param1 + param2).ToString());
            }
        }
    // Define a custom delegate that has a string parameter and returns void.
    delegate void CustomDel(string s);
    
    class TestClass
    {
        // Define two methods that have the same signature as CustomDel.
        static void Hello(string s)
        {
            Console.WriteLine($"  Hello, {s}!");
        }
    
        static void Goodbye(string s)
        {
            Console.WriteLine($"  Goodbye, {s}!");
        }
    
        static void Main()
        {
            // Declare instances of the custom delegate.
            CustomDel hiDel, byeDel, multiDel, multiMinusHiDel;
    
            // In this example, you can omit the custom delegate if you 
            // want to and use Action<string> instead.
            //Action<string> hiDel, byeDel, multiDel, multiMinusHiDel;
    
            // Create the delegate object hiDel that references the
            // method Hello.
            hiDel = Hello;
    
            // Create the delegate object byeDel that references the
            // method Goodbye.
            byeDel = Goodbye;
    
            // The two delegates, hiDel and byeDel, are combined to 
            // form multiDel. 
            multiDel = hiDel + byeDel;
    
            // Remove hiDel from the multicast delegate, leaving byeDel,
            // which calls only the method Goodbye.
            multiMinusHiDel = multiDel - hiDel;
    
            Console.WriteLine("Invoking delegate hiDel:");
            hiDel("A");
            Console.WriteLine("Invoking delegate byeDel:");
            byeDel("B");
            Console.WriteLine("Invoking delegate multiDel:");
            multiDel("C");
            Console.WriteLine("Invoking delegate multiMinusHiDel:");
            multiMinusHiDel("D");
        }
    }
    /* Output:
    Invoking delegate hiDel:
      Hello, A!
    Invoking delegate byeDel:
      Goodbye, B!
    Invoking delegate multiDel:
      Hello, C!
      Goodbye, C!
    Invoking delegate multiMinusHiDel:
      Goodbye, D!
    */

    官网复习一下委托相关概念,记录一下地址

  • 相关阅读:
    (0.12)elasticsearch分布式集群原理(ES7.9)
    (0.9)elasticsearch分布式集群概念
    mysql分库分表【转】
    (0.11)elasticsearch常用查询,REST API的基本约定,ES增删查改
    mysql全日志自动化脚本
    Java虚拟机--类加载的过程
    Java虚拟机--运行时数据区域
    新题型|结构不良题
    恒等变形的是与非
    分形图与二阶数列
  • 原文地址:https://www.cnblogs.com/marshhu/p/11821808.html
Copyright © 2011-2022 走看看