zoukankan      html  css  js  c++  java
  • 再谈.NET委托(delegate、Func<>)

    为了演示委托,我们先来定义一个方法:
    public static bool IsTen(int i)
    {
        return i == 10 ? true : false;
    }

    如果要用自定义委托,则需要声明:
    delegate bool  IsTenDelegate(int i);

    示例一:
    //这是最基本的写法
    IsTenDelegate d = new IsTenDelegate(IsTen);
    Console.WriteLine(d(10)); //true

    示例二:
    //自定义匿名委托
    IsTenDelegate d = delegate(int i) { return i == 10 ? true : false; };
    Console.WriteLine(d(10)); //true

    示例三:
    //或者使用系统现有的委托Func<>,结合lambda表达式
    Func<int, bool> d = p => p == 10 ? true : false;
    Console.WriteLine(d(10)); //true

    示例四:
    //或者也可以这么写
    Func<int, bool> d = delegate(int i) { return i == 10 ? true : false; };
    Console.WriteLine(d(10)); //true

    -------------- 高端大气上档次的分割线 --------------------

    下面我们来看一个Func<>委托的实际应用场景:
    //假设有一个Model
    public class TModel
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public List<string> Friends { get; set; }
    }

    //提供一个处理单个Model数据的方法模板,返回方法集合
    public static List<Func<TModel, object, object>> DataConver()
    {
        List<Func<TModel, object, object>> list = new List<Func<TModel, object, object>>();
        list.Add((t, p) => t.ID = (int)p);
        list.Add((t, p) => t.Name = p.ToString());
        return list;
    }

    //利用方法集合处理数据,并返回结果数据
    //此方法为一个泛型方法,接受类型参数T
    public static List<T> GetData<T>(List<Func<T, object, object>> dataMaker) where T:class,new()
    {
        List<T> lst = new List<T>();
        T t = new T();
        for (int i = 0; i < dataMaker.Count; i++)
        {
            //因为dataMaker是方法集合,而每个方法都负责处理T中的一个成员,
            //这里假设所有方法的第二个参数都是123,
            //具体应用场景应该是根据T对应的成员类型做不同的转换。
            dataMaker[i](t, 123);
        }
        lst.Add(t);
        return lst;
    }

    //调用
    List<TModel> list = GetData<TModel>(DataConver());

  • 相关阅读:
    每个人都有属于自己的机会
    [转]Android动画开发——Animation动画效果
    [转]android 使用WebView
    深圳 2012 职称英语 报名
    [转]java中的io笔记
    [转]手机蓝牙各类服务对应的UUID(常用的几个已通过验证)
    [文摘20111215]急事慢慢说
    [转]Android XML解析
    [转]J2SE复习笔记2线程
    queryScopedSelector
  • 原文地址:https://www.cnblogs.com/zhaow/p/9754586.html
Copyright © 2011-2022 走看看