C# 闭包Closure

考虑了下,还是记录下吧 ,要不然以后又忘了
参考文章:
C#与闭包


public class TCloser{
public Func<int> T1()
    {
        var n = 999;
        Func<int> result = () =>
        {
            return n;
        };
 
        n = 10;
        return result;
    }
 
    public dynamic T2()
    {
        var n = 999;
        dynamic result =new { A = n };
        n = 10;
        return result;
    }
    static void Main(){
        var a = new TCloser();
        var b = a.T1();
        var c = a.T2();
        Console.WriteLine(b());
        Console.WriteLine(c.A);
    }
} 

返回结果:
在这里插入图片描述
因为闭包的特性,这里匿名函数中所使用的变量就是实际T1中的变量,与之相反的是,匿名对象result里面的A只是初始化时被赋予了变量n的值,它并不是n,所以后面n改变之后A并未随之而改变。这正是闭包的魔力所在。
还有就是像T1方法带upvalue的返回函数其实IL中返回的是一个类,将变量n作为类的一个属性去处理的

猜你喜欢

转载自blog.csdn.net/codingriver/article/details/83020722