回顾我正在做的这个项目,遇到了一些我不太理解的代码......
_monitor.Run(RaiseEvent, sender, args);
转到定义 上 Run
带我到这个:
public void Run<S, R>(Action<S, R> action, S s, R t)
{
if (Monitor.TryEnter(_sync, wait))
{
try
{
action(s, t);
}
catch(Exception ex)
{
ErrorHandlers.LogVerbose("UI.Shell", "Failed to Enter Event (1)", ex);
}
finally
{
if (!_isDisposing)
Monitor.Exit(_sync);
}
}
}
Run
还有另一个重载,它只是只有示例中的前两个参数。
方法名称和Action
参数中的<S, R>
是什么?我推断它们是某种通用类型,允许"模棱两可"的参数(s
和 t
(,但我看不到 S 或 R 在哪里/如何设置。
,这是一个泛型方法,其中S
和R
由调用代码定义。因此,对于您发布的示例,S
是sender
的类型(很可能是object
(,R
是args
的类型(最轻EventArgs
(。
Action<S, R>
是一个接受两个参数但不返回任何内容的委托。需要返回值的委托是 Func<T, TResult>
,其中 TResult
是返回值的类型。