码迷,mamicode.com
首页 > 其他好文 > 详细

泛型委托示例

时间:2019-11-24 11:43:07      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:标识   lin   类型   new   OLE   factory   system   ram   mac   

delegate T Factory<out R, in S , T>() 

//   out R  协变        in  S   逆变     T   不变

 

----------------------------------------------------------------------------------------------------

public delegate TR Func<T1, T2, TR>(T1 p1, T2 p2);   //泛型委托  TR委托返回类型   T1,T2 委托参数类型

class Simple

{

  static public string PrintString(int p1, int p2) //方法匹配委托

  {

    int total = p1 + p2;

    return total.ToString();

  }

}

class Program

{

  static void Main()

    {

      var myDel = new Func <int, int, string>(Simple.PrintString);   //创建委托实例

      Console.WriteLine("ToTal: {0}", myDel(15, 13));//  调用委托

    }

}

 

另一种out协变

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

namespace ConsoleApplication33
{
    class Animal                                            //基类
    {
        public int Legs = 4;
    }

    class Dog:Animal                                        //派生类
    {

    }

    class Program
    {
        delegate T Factory<out T>();

        static Dog MackDog() { return new Dog(); }
        static void Main(string[] args)
        {
            Factory<Animal> animalMacker = MackDog;             //隐式强制转换

            Factory<Dog> dogMacker = MackDog;

            Factory<Animal> animalMacker2 = dogMacker;          //需要out标识符

            Factory<Animal> animalMacker3 = new Factory<Dog>(MackDog);  //需要out标识符
        }
    }
}

 

 

泛型委托示例

标签:标识   lin   类型   new   OLE   factory   system   ram   mac   

原文地址:https://www.cnblogs.com/bedfly/p/11921520.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!