zoukankan      html  css  js  c++  java
  • 关于Delegate与接口回调的例子

    在C#中用Delegate和接口的回调都能实现外部方法的委托调用,它们有什么区别呢?

    Delegate可以用+=或-=快速的绑定或解绑多个方法。而接口实现起来则显得更麻烦。

    如果Delegate只绑定一个事件,接口中也只定义了一个方法则两者是等价的。

    Delegate例子:

    namespace Test
    {
        class Program
        {
            static void Main(string[] args)
            {
                CarDelegate car = new CarDelegate();
                car.ColorEvent += new CarDelegate.ColorHandler(ColorMethod1);
                car.ColorEvent += new CarDelegate.ColorHandler(ColorMethod2);
                car.Color = "Black";//修改Color时会触发事件

                Console.ReadLine();
            }

            static void ColorMethod1(string color)
            {
                Console.WriteLine("method1=" + color);
            }

            static void ColorMethod2(string color)
            {
                Console.WriteLine("method2=" + color);
            }
        }

        public class CarDelegate
        {
            private string color;
            public delegate void ColorHandler(string color);
            public event ColorHandler ColorEvent;

            public string Color
            {
                get { return color; }
                set
                {
                    color = value;
                    ColorEvent(this.color);
                }
            }
        }
    }

     关于接口回调的例子:

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

    namespace Test
    {
        class Program
        {
            static void Main(string[] args)
            {
                Car car = new Car(new CarActionImpl());
                car.Color = "Black";

                Console.ReadLine();
            }
        }

        public interface ICarAction
        {
            void ChangeColor(string color);
        }

        public class CarActionImpl : ICarAction
        {
            public void ChangeColor(string color)
            {
                Console.WriteLine("method1=" + color);
            }
        }

        public class Car
        {
            private string color;
            private ICarAction carAction;
            public Car(ICarAction carAction)
            {
                this.carAction = carAction;
            }
            public string Color
            {
                get { return color; }
                set
                {
                    color = value;
                    carAction.ChangeColor(this.color);
                }
            }
        }
    }
  • 相关阅读:
    mojoPortal学习笔记之页面访问权限控制
    页面中添加某模块
    styletreeview.css页面菜单
    mojoPortalprovider模式学习之1.1之IndexBuilderManager
    mojoportal学习笔记之HtmlContent模块
    CLR via c#学习笔记 之 引用类型与值类型
    mojoportal中解决下载文件名乱码问题
    mojoportal学习笔记之显示所有菜单
    blogmodule.css博客栏目
    [转]数据访问组件SqlHelper
  • 原文地址:https://www.cnblogs.com/yeagen/p/2232652.html
Copyright © 2011-2022 走看看