C#函数委托类型
rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C06%5Cclip_filelist.xml">
1. 行为函数(Action<T>)
这种委托的特征是void xxx(T obj),既返回类型void,接受一个T类型的参数。其目的是采取基于输入的行为。这种行为可能是修改参数的内容,甚至是与其他对象的相互作用
- /// <summary>
- /// 行为集合,行为函数(Action<T>) 委托特征void xxx(T obj)
- /// </summary>
- /// <typeparam name="T"></typeparam>
- public class ActionCollection<T> : Collection<T>
- {
- private Action<T> action;
- public ActionCollection(Action<T> action)
- {
- this.action = action;
- }
- protected override void InsertItem(int index, T item)
- {
- action(item);
- base.InsertItem(index, item);
- }
- }
- static void Main(string[] args)
- {
- ActionCollection<string> ac = new ActionCollection<string>(delegate(string s) { Console.WriteLine(s); });
- ac.Add("Hello Word!");
- Console.ReadLine();
- }
rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C08%5Cclip_filelist.xml"> 可以采用类似的技术触发一个基于列表修改的数据库插入和删除操作,在元素被插入之前修改元素的状态。
rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C09%5Cclip_filelist.xml">
2. 转换函数(Converter<Tinput,TOutput>)
转换器是以TOutput xxx(TInput from)为签名的委托,其目的是将TInput类型的对象转换成TOutput类型的对象.当然也可以通过将Converter<TInput,TOutput>传递给它所要应用的操作来对不可变的对象进行一般转换.TInput和TOutput可以是相同类型.
- /// <summary>
- /// 基于转换器的集合,转换函数(Converter< TInput,TOutput>)
- /// </summary>
- /// <typeparam name="T"></typeparam>
- public class ConverterCollection<T> : Collection<T>
- {
- private Converter<T, T> convert;
- public ConverterCollection(Converter<T, T> convert)
- {
- this.convert = convert;
- }
- protected override void InsertItem(int index, T item)
- {
- item=convert(item);
- base.InsertItem(index, item);
- }
- }
Main函数调用
- static void Main(string[] args)
- {
- ConverterCollection<string> cc = new ConverterCollection<string>(delegate(string s) { return s.ToUpper(); });
- cc.Add("Hello Word");
- foreach (string s in cc)
- {
- Console.WriteLine(s);
- }
- Console.ReadLine();
- }
HELLO WORD