泛型委托在项目中的应用

感悟:对泛型委托基本属于有点认识,但从来没真正在项目中使用过,有时感觉没有合适的场景应用,但看了artech兄的文章,我才明白,原来泛型委托真的可以做很多事情,而且效果往往是没有使用委托所达不到的。

Action<T> 泛型委托:封装一个方法,该方法只采用一个参数并且不返回值。可以使用此委托以参数形式传递方法,而不用显式声明自定义的委托。该方法必须与此委托定义的方法签名相对应。也就是说,封装的方法必须具有一个通过值传递给它的参数,并且不能返回值。当然泛型委托不只是只能支持一个参数,它最多可以支持四个参数。  

泛型委托与直接显示声明自定义委托的示例比较:

1:显示声明自定义委托:

delegate void DisplayMessage(string message);
public class TestCustomDelegate
{
    public static void Main()
    {
       DisplayMessage messageTarget;
       messageTarget = ShowWindowsMessage;
       messageTarget("Hello, World!");
    }
    private static void ShowWindowsMessage(string message)
    {
       MessageBox.Show(message);
    }
}

2: Action<T> 用法。比起自定义委托,明显可以看出代码简洁了。

public class TestAction1
{
    public static void Main()
    {
       Action<string> messageTarget;
      messageTarget = ShowWindowsMessage;
       messageTarget("Hello, World!");
    }
    private static void ShowWindowsMessage(string message)
    {
       MessageBox.Show(message);
    }
}

时间: 2024-07-28 21:07:45

泛型委托在项目中的应用的相关文章

如何使用.NET中的Action及Func泛型委托

委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储.传递, 之后在任何时刻进行调用,因此,C#中函数回调机制的实现基本上依赖于委托.C#的delegate关键字用于声明委托,它具有将声明委托类型映射到 System.Delegate类的能力,System.Delegate类位于mscorlib.dll中,是.NET的基础核心类之一.使用 delegate关键字声明一个委托,实质上创建了System.Delega

使用.NET中的Action及Func泛型委托

原文 http://www.cnblogs.com/skm-blog/archive/2013/05/24/3096294.html   委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储.传递, 之后在任何时刻进行调用,因此,C#中函数回调机制的实现基本上依赖于委托.C#的delegate关键字用于声明委托,它具有将声明委托类型映射到 System.Delegate类的能力,System.Delegate类位

谈谈23种设计模式在Android项目中的应用

前言 本文将结合实际谈谈23种设计模式,每种设计模式涉及 定义:抽象化的定义与通俗的描述,尽量说明清楚其含义与应用场景 示例:如果项目中有使用过该模式,则会给出项目中的代码,否则会给出尽可能简单好理解的java代码 Android:该设计模式在Android源码框架中哪些地方有使用到 重构:项目中是否存在可以用该模式进行重构的地方,如果有会给出重构前与重构后的代码或者思路 用这种方式进行介绍设计模式,旨在结合每天都在接触的Android实际项目开发更好地理解设计模式,拉近与设计模式的距离,同时在

浅谈游戏化在保险项目中的实践

引子 虽说是关于Gamification游戏化的实践分享,其实也是两年前做过的项目了.之所以现在才写出这篇实践分享,也是源于最近看<MacTalk人生元编程>中提到的使用智能手环对思想和行为的改变:"用这玩意的另一个好处就是,如果需要徒步去做点什么,以前的反映是'我了个擦,怎么这么远'.现在的反映是'好,又可以增加几千步了'". 这让我意识到,这不也是游戏化嘛,只是不局限在和在线业务结合紧密的领域,但却更深入地改变了我们的生活习惯. 言归正传,游戏化是最近几年比较热门的一个

C#动静结合编程之四:泛型委托

多态 多态是什么?一句话:接口和实现的1:n映射.多态让程序能通过统一的接口(广义的接口,意指规范 )调用不同的实现,从而增强程序的表达能力和灵活性.我们最为熟悉的多态形式是包括接口继承在内的 类型多态: var animals = new List<IAnimal>() { new Cat("Missy"), new Cat("Mr. Bojangles"), new Dog("Lassie") }; foreach (var an

Visual Studio 2010:泛型委托的协变、逆变Demo

在编程语言中,"协变"是指能够使用与原始指定的派生类型相比,派生程度 更大的类型."逆变"则是指能够使用派生程度更小的类型.在 .NET Framework 4 和 Visual Studio 2010 中,C# 和 Visual Basic 都支持在泛型接口和委托中 使用协变和逆变,并允许隐式转换泛型类型参数. 如果泛型接口或委托的泛型参数声明为协变或逆变,则将该泛型接口或委托称 为"变体".C# 和 Visual Basic 都允许您创建自己

C#委托基础5——泛型委托Action

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客.本文参考自金旭亮老师的<.NET 4.0面向对象编程漫谈>有关代理的内容   为了方便开发,.NET基类库针对在实际开发中最常用的情形提供了几个预定义好的委托,这些预定义委托用得很广,比如在编写lambda表达式和开发并行计算程序时经常要用到他们 对于函数返回值为空的情形,可以使用Action泛型委托 class Program { // 对于函数返回值为空的情形,可以使用Action泛型委托 void Showst

C# 参考:令人惊喜的泛型委托 Predicate/Func/Action

Predicate 泛型委托   表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素. 看看下面它的定义:     // Summary:    //     Represents the method that defines a set of criteria and determines whether    //     the specified object meets those criteria.   

表达式树和泛型委托

什么是表达式树? 表达式树又称为表达式目录树,以数据形式表示语言级代码.所有的数据都存储在树结构中,每个结点表示一个表达式(Expression).要想手动生成表达式树我们需要引用System.Linq.Expressions 命名空间,最重要的一个类是Expression,它是所有表达式的基类.例如: 1:参数表达式:ParameterExpression,就是一个方法中的参数,例如 search(string key),key可以看成是一个参数表达式. 2:二元表达式:BinaryExpre