我绞尽脑汁想弄清楚这段代码到底要完成什么。
在某些情况下,下面的语句调用时带bool参数为true(如下所示),其他情况下为false:
InitializeBackgroundThread_PDALoginTerminate(true);
InitializeBackgroundThread_PDALoginTerminate()方法连接或断开事件处理程序,似乎:
private void InitializeBackgroundThread_PDALoginTerminate( bool add )
{
try
{
if ( add )
pc.PDALoginTerminate += new PendingCommands.PDALoginTerminateEventHandler( DeinitLoginDialogs );
else
pc.PDALoginTerminate -= new PendingCommands.PDALoginTerminateEventHandler( DeinitLoginDialogs );
…
…这是PendingCommands.PDALoginTerminateEventHandler()指向的代码:
public delegate void PDALoginTerminateEventHandler();
public event PDALoginTerminateEventHandler PDALoginTerminate;
public void OnPDALoginTerminate()
{
if (PDALoginTerminate != null)
PDALoginTerminate();
}
我不知道这里发生了什么,如果真的发生了什么;看起来好像代码只是在追逐自己的尾巴,或者是一个巨大的徒劳的追逐/循环引用;右键单击PDALoginTerminate()会将我带到它上面的行。
我错过了什么(除了,希望是暂时的,我的理智)?
注意:这是一个。net 1.1项目。
更新我喜欢简化的想法,但如果我这样做:
pc.PDALoginTerminate += DeinitLoginDialogs;
…我得到,"方法' pdclient . frmcentral . deinitlogindialogs()'引用没有括号"
…如果我这样做:
pc.PDALoginTerminate += DeinitLoginDialogs();
我得到,"不能隐式地将类型'void'转换为'PendingCommands '。PDALoginTerminateEventHandler"
这是处理程序:
DeinitLoginDialogs
您将回到引发事件的方法,但是处理程序在这里被分配(或未分配):
if ( add )
pc.PDALoginTerminate += new PendingCommands.PDALoginTerminateEventHandler( DeinitLoginDialogs );
else
pc.PDALoginTerminate -= new PendingCommands.PDALoginTerminateEventHandler( DeinitLoginDialogs );
注意PDALoginTerminateEventHandler
构造函数的参数。值得注意的是,转换可以隐式执行,也就是说,像这样:
pc.PDALoginTerminate += new PendingCommands.PDALoginTerminateEventHandler( DeinitLoginDialogs );
变得……
pc.PDALoginTerminate += DeinitLoginDialogs;
耶。不幸的是,长名字对可读性没有帮助。他们也伤了我的头。