今天我回答了一个question https://stackoverflow.com/questions/25588702/move-control-either-horizontally-or-vertically-not-combination-of-both/25590312#25590312,主要是关于UI交互。但后来它让我思考 OP 使用代码处理动态创建的控件的方式。
错过了 .Net 2-4 并且现在才学习“新”东西,这实际上是让我首先进入这个问题的原因......:
private void AddPieceButton_Click(object sender, EventArgs e)
{
somePieceControl newPiece = new somePieceControl ();
//..
newPiece.MouseDown += (sender2, evt) => { /* 1st block of code */ };
newPiece.MouseUp += (sender2, evt) => { /* 2nd block of code */ };
newPiece.MouseMove += (sender2, evt) => { /* 3rd block of code */ }
//..
someContainer.Controls.Add(newPiece);
}
在测试用例中,这个问题并不重要;但代码块很容易变得更多、更大;同样在像围棋这样的游戏中,最终也会有数百个棋子。
虽然人们可能会/可以&应该质疑添加如此多控件的想法,但好奇的头脑仍然想知道……:每一块是否都会有这些代码块的自己的副本,就像我猜的那样,它们已经或是否在我们的奇迹世界中被分解出来了像正常事件一样并且在运行时内存中只存在一次?
每个 lambda 在编译时都会转换为“正常”方法,因此 lambda 的实际代码不会重复。但是,每次此方法运行时,都会实例化引用代码的新 EventHandler 委托。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)