读书人

匿名方法跟lambda表达式算是静态方法

发布时间: 2014-01-22 14:50:12 作者: rapoo

匿名方法和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;
}

读书人网 >C#

热点推荐