复习action委托

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

namespace ConsoleApplication4
{
public static class InvokeExt
{

//扩展方法进行装箱输出继承IEnumerable<T>的内容项
public static void ShowItems<T>(this IEnumerable<T> collection)
{
foreach (var item in collection)
{
Console.WriteLine(item);

}
}

//Action<Object>的尖括号里有一个Object说明有一个输入参数

public static void InvokeAndCatch<TException>(this Action<Object> d, Object o) where TException:Exception
{
try
{

//在调用这个扩展方法的时候已在Main方法中为这个action委托赋值过了,而在Main方法中已经定义了这个委托的行为是o=>console.writeline(o.gettype());有一个输入参数,委托的行为是在控制台打印这个输入参数的类型
//下面的语句相当于o=>Console.WriteLine(null.GetType());引发了空引用异常

d(o);
}
catch (Exception)
{

;
}
}
}

class Program
{
static void Main(string[] args)
{

//action委托定义了方法的行为(这里是告诉编译器这里的动作是传入一个参数,并在控制台上输出这个参数的类型)
Action<Object> action = o => Console.WriteLine(o.GetType());

// 这是为action<object>委托定义的一个扩展方法,这里的传入参数是一个null

action.InvokeAndCatch<NullReferenceException>(null);
Action a = "Jeff".ShowItems;
a();
Console.ReadKey();
}
}
}

 

posted on 2016-01-19 09:43  听哥哥的话  阅读(252)  评论(0编辑  收藏  举报

导航