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. VS2015 + QT5.7 中文的坑

    试验1: #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") #endif #include < ...

  2. [python]字符串方法

    字符串的方法及注释 字符串的方法及注释             capitalize()   把字符串的第一个字符改为大写   casefold()   把整个字符串的所有字符改为小写   cente ...

  3. Tomcat基础教程(四)

    一.将Web应用部署到Tomcat中 为什么要部署?将Web应用部署到Tomcat中,那么Tomcat就能找到相应的Web应用,当Tomcat启动时就会加载和初始化Web应用,而在Tomcat启动后, ...

  4. 自由树的计数 Labeled unrooted tree counting

    问题: 4个标记为1,2,3,4的节点构成自由树(算法导论里的定义,连接着,无环,无向的图),一共有多少种构造方法?如果N个节点呢? 解决方法: 4个节点可以通过穷举的方式得到答案,一共有16中方式. ...

  5. IOS在后台每隔一段时间执行一下

    步骤: 1.在info.plist里加入UIBackgroundModes键,其值为数组,数组之一为voip字符串: <key>UIBackgroundModes</key>& ...

  6. Hibernate 注解 动态插入( DynamicInsert) 动态更新(DynamicUpdate)

    @DynamicUpdate(value = true)@DynamicInsert(value = true) 这两个注解默认是false,经试验,如果使用了这两个注解,在一定程度上是可以提高插入和 ...

  7. 【HDOJ】2707 Steganography

    简单字符串,读懂题,很容易AC. #include <stdio.h> #include <string.h> ], line[], des[]; int main() { i ...

  8. bzoj2631 3282

    这两题都是link cut tree的裸题之前看Qtree的论文,只会在确定父子关系的情况下连边和删边如果在任意两个点连边删边怎么做呢?这时候我们不能随意的将一个点的父节点设为另一个点,因为其中某个点 ...

  9. SPOJ_10628_Count_on_a_Tree_(主席树+Tarjan)

    描述 http://www.spoj.com/problems/COT/ 给出一棵n个节点的树,树上每一个节点有权值.m次询问,求书上u,v路径中第k小的权值. COT - Count on a tr ...

  10. 【session】

    users.json { "tobi": { "password": "ferret", "name": "T ...