日期:2014-05-17  浏览次数:21006 次

匿名方法和lambda表达式,算是静态方法还是成员方法呢?
主要是关心内存泄漏问题
比如这段代码

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            PublicFunc.Add = (i, i1) => i + i1;
            PublicFunc.AddHeight = i => i + Height;
        }
    }

    public class PublicFunc
    {
        public static Func<int, int, int> Add;
        public static Func<int, int> AddHeight;
    }


当Form1被关闭后,能够被垃圾回收吗?如果只有Add方法而没有AddHeight方法呢(也就是如果表达式中没用到this.xxx)?  如果不能被垃圾回收,有办法解决吗

------解决方案--------------------
说实话,这个问题我不知道答案,但是我知道如何去验证。

为你的Form1 加一个析构函数,然后下个断点或者输出点日志。

打开form1,然后关闭。

之后多调用几次GC,或者进行一些其它操作,看看Form1是否会进行析构。
------解决方案--------------------
我的直观感觉是不会泄露,因为匿名方法本身是个局部变量。

匿名方法应该是和下面的ob对象是一样的。


private void Func(A a)
{
object ob = new object();

a.obj = ob;
}