使用了泛型委托这个东西。
Predicate 泛型委托。
Predicate\func\action 的输入参数都标记为IN,这就意味着参数是支持逆变的。
逆变意味着可以从较大的类型转换为较小的类型。<object> 可以转换为<string> .逆变实际上也是一种泛型!!!
public class DoTest {
public void doTest() {
TestInfo ti=new TestInfo();
ti.Good = 6;
TestDele<TestInfo> td = new TestDele<TestInfo>();
td.DoWork(5, env =>{env.Good = env.Good + 1;}, ti);
TestDele2 td2 = new TestDele2();
td2.DoWork(5, env => { env.Good = env.Good + 1; }, ti);// 编译器可以从ti 判定 env的类型,而不用在<>中指明。
td2.DoWork<TestInfo>(5, env => { env.Good = env.Good + 1; }, ti);
} }
public class TestDele<T> {
public delegate void func2(T t);
public void DoWork(int id,func2 f2,T p2) { f2(p2); }
}
public class TestDele2 {
public delegate void func2<T>(T t);
public void DoWork<T>(int id, func2<T> f2, T p2) { f2(p2); }
}
public class TestInfo {
private int good; public int Good { get { return good; } set { good = value; } } }
原文地址:http://www.cnblogs.com/gaoxianzhi/p/3816121.html