zoukankan      html  css  js  c++  java
  • 委托中的协变和逆变

    将方法签名与委托类型匹配时,协变和逆变为您提供了一定程度的灵活性。协变允许方法具有的派生返回类型比委托中定义的更多。逆变允许方法具有的派生参数类型比委托类型中的更少。

    示例 1(协变)
     本示例演示如何将委托与具有返回类型的方法一起使用,这些返回类型派生自委托签名中的返回类型。由 SecondHandler 返回的数据类型是 Dogs类型,它是由委托中定义的 Mammals 类型派生的。
    class Mammals
    {
    }
    
    class Dogs : Mammals
    {
    }
    
    class Program
    {
        //定义委托
        public delegate Mammals HandlerMethod();
    
        public static Mammals FirstHandler()
        {
            return null;
        }
    
        public static Dogs SecondHandler()
        {
            return null;
        }
    
        static void Main()
        {
            HandlerMethod handler1 = FirstHandler;
    HandlerMethod handler2 = SecondHandler; } }
     
      本示例演示如何将委托与具有某个类型的参数的方法一起使用,这些参数是委托签名参数类型的基类型。通过逆变,以前必须使用若干个不同处理程序的地方现在只要使用一个事件处理程序即可
。如,现在可以创建一个接收 EventArgs 输入参数的事件处理程序,然后,可以将该处理程序与发送 MouseEventArgs 类型(作为参数)的 Button.MouseClick 事件一起使用,也可以将该处理程序与发送 KeyEventArgs 参数的 TextBox.KeyDown 事件一起使用。
     
    System.DateTime lastActivity;
    public Form1()
    {
        InitializeComponent();
    
        lastActivity = new System.DateTime();
        this.textBox1.KeyDown += this.MultiHandler; //works with KeyEventArgs
        this.button1.MouseClick += this.MultiHandler; //works with MouseEventArgs
    
    }
    
    // Event hander for any event with an EventArgs or
    // derived class in the second parameter
    private void MultiHandler(object sender, System.EventArgs e)
    {
        lastActivity = System.DateTime.Now;
    }
  • 相关阅读:
    PostgreSQL-14-异常值处理
    Python-5-字符串方法
    Python-6-字典-函数dict,字典的基本操作及将字符串设置功能用于字典
    STP-6-快速生成树协议-新端口角色,状态和类型以及新链路类型
    PostgreSQL-13-缺失值处理
    IP服务-6-SNMP
    IP服务-7-系统日志
    Python-4-设置字符串的格式字符串
    IP服务-5-网络时间协议
    Python -3-列表和元组
  • 原文地址:https://www.cnblogs.com/weicanpeng/p/8072963.html
Copyright © 2011-2022 走看看