• 基本类型委托(一)


     151初识委托

     //声明一个委托,它的实例引用一个方法,该方法接受一个Int32的参数并返回void
        internal delegate void Feedback(Int32 value);
        
    public sealed class Program {
            
    public static void Main() {
                StaticDelegateDemo();
                InstanceDelegateDemo();
                ChainDelegateDemo1(
    new Program());
                ChainDelegateDemo2(
    new Program());
            }

            
    //委托调用静态回调方法
            private static void StaticDelegateDemo() {
                Console.WriteLine(
    "---StaticDelegateDemo---");
                Counter(
    13null);
                Counter(
    13new Feedback(FeedBackToConsole));
                Counter(
    13new Feedback(FeedBackToMsgBox));
                Console.ReadLine();
            }

            
    //委托调用实例回调方法
            private static void InstanceDelegateDemo() {
                Console.WriteLine(
    "---InstanceDelegateDemo---");
                Program p 
    = new Program();
                Counter(
    13new Feedback(p.FeedBackToFile));
                Console.ReadLine();
            }

            
    //顺序调用多个静态、实例方法
            private static void ChainDelegateDemo1(Program p) {
                Console.WriteLine(
    "---ChainDelegateDemo1---");
                Feedback fb1 
    = new Feedback(FeedBackToConsole);
                Feedback fb2 
    = new Feedback(FeedBackToMsgBox);
                Feedback fb3 
    = new Feedback(p.FeedBackToFile);

                Feedback fbChain 
    = null;
                fbChain 
    = (Feedback)Delegate.Combine(fbChain, fb1);
                fbChain 
    = (Feedback)Delegate.Combine(fbChain, fb2);
                fbChain 
    = (Feedback)Delegate.Combine(fbChain, fb3);
                Counter(
    45, fbChain);

                Console.WriteLine();
                fbChain 
    = (Feedback)Delegate.Remove(fbChain, new Feedback(FeedBackToMsgBox));
                Counter(
    67, fbChain);
                Console.ReadLine();
            }

            
    //顺序调用多个静态、实例方法
            private static void ChainDelegateDemo2(Program p) {
                Console.WriteLine(
    "---ChainDelegateDemo2---");
                Feedback fb1 
    = new Feedback(FeedBackToConsole);
                Feedback fb2 
    = new Feedback(FeedBackToMsgBox);
                Feedback fb3 
    = new Feedback(p.FeedBackToFile);

                Feedback fbChain 
    = null;
                fbChain 
    += fb1;
                fbChain 
    += fb2;
                fbChain 
    += fb3;
                Counter(
    89, fbChain);

                Console.WriteLine();
                fbChain 
    -= new Feedback(FeedBackToMsgBox);
                Counter(
    1011, fbChain);
                Console.ReadLine();
            }

            
    //
            private static void Counter(Int32 from, Int32 to, Feedback fb) {
                
    for (int i = from; i <= to; i++){
                    
    if (fb != null)
                        fb(i);
                }

            }

            
    private static void FeedBackToConsole(Int32 value) {
                Console.WriteLine(
    "控制台输出:" + value);
            }

            
    private static void FeedBackToMsgBox(Int32 value) {
                Console.WriteLine(
    "消息框显示:" + value);
            }

            
    private void FeedBackToFile(Int32 value) {
                StreamWriter sw 
    = new StreamWriter("C:/FeedBackToFile.txt"true);
                sw.WriteLine(
    "文件显示:" + value);
                sw.Close();
            }

        }

    152使用委托来回调静态方法

    153使用委托回调实例方法

    154委托揭秘

    155使用委托回调多个方法(链式)
  • 相关阅读:
    django Highcharts制作图表--显示CPU使用率
    django--ajax的使用,应用
    Selenium&Pytesseract模拟登录+验证码识别
    django Highcharts制作图表--显示CPU使用率
    django--ajax的使用,应用
    斗鱼直播招聘测试总监
    腾讯自动化测试的AI智能
    转载Linq中GroupBy方法的使用总结
    转载.NET 4.0中的泛型的协变和逆变
    转载c#泛型 类型参数的约束(c#编程指南)
  • 原文地址:https://www.cnblogs.com/tenghoo/p/1208131.html
Copyright © 2020-2023  润新知