using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms; namespace LamdaSimple
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private delegate double MathAction(double num); private double Double(double input)
{
return input * 2;
} private void button1_Click(object sender, EventArgs e)
{
//MSDN上例子:http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=ZH-CN&k=k(DELEGATE_CSHARPKEYWORD);k(DELEGATE)&rd=true
// Instantiate delegate with named method:委托
MathAction ma = Double;
// Invoke delegate ma:
double multByTwo = ma(4.5);
Console.WriteLine(multByTwo); // Instantiate delegate with anonymous method:匿名方法
MathAction ma2 = delegate(double input)
{
return input * input;
};
double square = ma2(5);
Console.WriteLine(square); // Instantiate delegate with lambda expression:Lambda表达式
MathAction ma3 = (s) =>
{
return s * s;
}; PrintAction((s) =>
{
return s * s;
}); //**************************************************************
//参数为:Delegate method;才可以进行new Action
Thread t = new Thread(() => this.textBox1.Invoke(new Action(() =>
{
for (int i = 0; i < 50; i++)
{
this.textBox1.Text = i.ToString();
}
})));
t.Start(); //**************************************************************
//s => s + s; s=>{ return s+ s;} 相当于
List<string> lst = new List<string>();
var v = lst.Select(s => { return s; });
var v1 = lst.Select(s => s + 10); List<Student> lstStundets = new List<Student>();
var v2 = lstStundets.Select(s =>
{
return new
{
aaa = s.ID,
bbbb = s.Name
};
});
//等于
var v3 = lstStundets.Select(s =>
new
{
aaa = s.ID,
bbbb = s.Name
}); //**************************************************************
//当只有一个参数的时候
lstStundets.ForEach(s =>
{
s.ID = "";
s.Name = "";
}); lstStundets.ForEach((s) =>
{
s.ID = "";
s.Name = "";
}); lstStundets.ForEach((s) =>
{
s.ID = "";
s.Name = "";
}); try
{
var intValue = this.textBox1.GetValue<int>();
}
catch (Exception)
{
}
} public void PrintAction(Func<double, double> ation)
{
}
} public class Student
{
public string ID { get; set; } public string Name { get; set; } public int Age { get; set; }
} public static class Exstions
{
///默认版本,调用上个重载方法 public static TResult GetValue<TResult>(this TextBox textBox)
where TResult : struct
{
return GetValue<TResult>(textBox, true);
} public static TResult GetValue<TResult>(this TextBox textBox, bool isShowError)
where TResult : struct
{
return GetValue<TResult>(textBox, (p) =>
{
if (isShowError)
{
p.Focus();
p.SelectAll();
MessageBox.Show("输入值格式不正确,请重新输入!",
"提示--值类型:" + typeof(TResult).Name,
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
});
} //ailed(textBox); 可以这样理解。
//委托指向方法;相当于一个不返回值,参数为TextBox的方法。如下:
public static void ExecutAction(TextBox textBox)
{
textBox.Focus();
textBox.SelectAll();
} public static TResult GetValue<TResult>(this TextBox textBox, Action<TextBox> failed)
where TResult : struct
{
var type = typeof(TResult);
var method = type.GetMethod("TryParse", new Type[] { typeof(string), type.MakeByRefType() });
var parameters = new object[] { textBox.Text, default(TResult) }; // 若转换失败,执行failed
if (!(bool)method.Invoke(null, parameters))
{
failed(textBox);
throw new InvalidCastException("输入值格式不正确,请检查输入值。");
} return (TResult)parameters[1];
}
}
}

  代码下载:http://files.cnblogs.com/zfanlong1314/LamdaSimple.zip

C# 自己对delegate的总结和认识的更多相关文章

  1. [.NET] C# 知识回顾 - 委托 delegate (续)

    C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...

  2. [C#] C# 知识回顾 - 委托 delegate

    C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...

  3. iOS 键盘添加完成按钮,delegate和block回调

    这个是一个比较初级一点的文章,新人可以看看.当然实现这个需求的时候自己也有一点收获,记下来吧. 前两天产品要求在工程的所有数字键盘弹出时,上面带一个小帽子,上面安装一个“完成”按钮,这个完成按钮也没有 ...

  4. C# 委托Delegate(一) 基础介绍&用法

    本文是根据书本&网络 前人总结的. 1. 前言 定义&介绍: 委托Delegate是一个类,定义了方法的类型, 使得可以将方法当做另一个方法的参数来进行传递,这种将方法动态地赋给参数的 ...

  5. Jquery中的bind(),live(),delegate(),on()绑定事件方式

    博客转载为作者:枫上善若水http://www.cnblogs.com/xilipu31/p/4105794.html 前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到d ...

  6. C#基础知识六之委托(delegate、Action、Func、predicate)

    1. 什么是委托 官方解释 委托是定义方法签名的类型,当实例化委托时,您可以将其实例化与任何具有兼容签名的方法想关联,可以通过委托实例调用方法. 个人理解 委托通俗一点说就是把一件事情交给别人来帮助完 ...

  7. [转载]C#委托和事件(Delegate、Event、EventHandler、EventArgs)

    原文链接:http://blog.csdn.net/zwj7612356/article/details/8272520 14.1.委托 当要把方法作为实参传送给其他方法的形参时,形参需要使用委托.委 ...

  8. jQuery 中bind(),live(),delegate(),on() 区别(转)

    当我们试图绑定一些事件到DOM元素上的时候,我相信上面这4个方法是最常用的.而它们之间到底有什么不同呢?在什么场合下用什么方法是最有效的呢? 准备知识: 当我们在开始的时候,有些知识是必须具备的: D ...

  9. UITableview delegate dataSource调用探究

    UITableview是大家常用的UIKit组件之一,使用中我们最常遇到的就是对delegate和dataSource这两个委托的使用.我们大多数人可能知道当reloadData这个方法被调用时,de ...

  10. C#委托的介绍(delegate、Action、Func、predicate)

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 (1). delegate delegate我们常用到的一种声明   Deleg ...

随机推荐

  1. C语言之程序结构

    一个好的程序首先要有好的程序结构,我从变量和结构两个方面来做分析. 一.浅谈程序中的变量 一个程序架构最基本的就是程序变量,谈到程序中的变量,我们应该考虑两部分,一方面是变量的作用域,一方面是变量的生 ...

  2. KEIL4.12中添加ULINK2的支持

    转载自:http://www.amobbs.com/thread-4767650-1-1.html 如果你用KEIL4.12,但却没有Ulink2下载器,只有早先用的Ulink下载器,那么你按照下面三 ...

  3. asp.net中Web使用Socket

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  4. django HTTP请求(Request)和回应(Response)对象

    Django使用request和response对象在系统间传递状态.—(阿伦)当一个页面被请示时,Django创建一个包含请求元数据的 HttpRequest 对象. 然后Django调入合适的视图 ...

  5. 使用solrj进行DIH操作

    背景说明:在一个项目中需要将Mongodb中的数据导入到solr中完成搜索.在solr中Mysql数据库有对应的DIH包,可以通过配置sql语句完成数据的导入.Mongodb下也有开源的工具用来实现数 ...

  6. 详解如何用AD 生成Gerber文件

    以上gerber文件就出完了;  下面步骤是:进行导出" 钻孔文件 ". 以上钻孔文件就出完了;  到此就全部完成输出了. 下面的操作,也可以不用导的 .下面步骤是:进行导出&qu ...

  7. 使用C#画图(饼图折线图)

    public PlaceHolder PlaceHolder1; //显示图像的控件 各个图像的类别名称如下: PictureType    图形种类    5    chChartTypeBarCl ...

  8. 漫谈CSS的渲染效率

    总结了部分所学.所听.所看.所问的一些CSS写作经验,书写高效的CSS - 漫谈CSS的渲染效率,它们与渲染效率及所占用消耗的资源有一定的关 联.部分为自己理解所写,不排除会有错漏,欢迎提供更好的意见 ...

  9. spoolsv.exe 报错,无法打印

    在使用打印机过程中突然出现spoolsv.exe应用程序错误,内存不能written•••,检查打印驱动,打印机设置选项无法打开.怀疑是病毒所致,升级杀毒软件后安全模式下杀毒后没有发现病毒,重启后还是 ...

  10. 【转】eclipse android 设置及修改生成apk的签名文件 -- custom debug keystore

    原文网址:http://hold-on.iteye.com/blog/2064642 android eclipse 设置及修改生成apk的签名文件 1. 问题: 平时在使用eclipse进行andr ...