方法优先顺序?

She*_*onH 3 c# listbox operator-precedence method-call

说我有2种方法.一种是由列表框中所选索引更改触发的方法.第二种方法有助于清除所有文本框,将列表框索引设置为-1,并设置焦点.

题:

方法二执行,在代码期间它将列表框的选定索引更改为-1,从而为第一个方法设置事件触发器.方法2是否暂停它自己的执行并将进程转移到事件,然后在方法1完成后返回其工作...或方法2完成其整个代码块然后转移到方法1,因为所选索引更改?

Rob*_*edy 8

第一种情况.

让我们暂时离开它,特别是因为它们没有参与你的场景.

你在谈论属性和方法,但在它之下,它只是功能.当一个函数调用另一个函数时,程序中的控件将转移到被调用函数.当该函数完成运行时,控制返回到调用它的位置.无论函数调用更多函数有多深,您的程序都会自动记住它需要返回的位置.*

当您的第二个函数设置索引时,实际发生的是编译器将属性集操作转换为函数调用.(属性最终只是函数的"语法糖".)该函数调用一堆对场景不重要的其他函数,除了其中一个是调用"索引已更改"事件处理程序的函数.它看到你有一个与该事件相关的方法,它会调用你的第一个方法.

您的第一个方法运行,当它完成时,它返回"调用索引更改的事件处理程序"函数.最终,那个和所有其他不重要的函数完成运行(可能在按顺序进行更多函数调用之后),并且"set the index property"函数将控制返回到第二个方法.

你可以向自己证明你的第一个建议就是如何运作.在第一种方法中显示一个消息框,并在第二种方法中设置索引属性的点之后显示另一个消息框.(使用不同的消息!)您应该看到第一条消息出现,在您关闭消息框后,您应该看到第二条消息出现,从而表明第二条方法在第一条消息运行时没有继续执行.

*这里一个极限,但它很少打,除非有一个在你的程序中的错误.当你有太多嵌套函数调用时,会发生什么是堆栈溢出.