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!
    */

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

  • 相关阅读:
    SuperMap房产测绘成果管理平台
    SuperMap产权登记管理平台
    Android adb shell am 的用法(1)
    由浅入深谈Perl中的排序
    Android 内存监测和分析工具
    Android 网络通信
    adb server is out of date. killing...
    引导页使用ViewPager遇到OutofMemoryError的解决方案
    adb logcat 详解
    How to send mail by java mail in Android uiautomator testing?
  • 原文地址:https://www.cnblogs.com/marshhu/p/11821808.html
Copyright © 2011-2022 走看看