我正在研究这个项目,遇到了一些我不太懂的代码......
_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
还有另一个重载只有样本中的前两个参数。
方法名称和<S, R>
参数中的Action
是多少?我推断它们是某种通用类型,允许“模糊”参数(s
和t
),但我没有看到S或R在何处/如何设置。< / p>
答案 0 :(得分:1)
是的,这是一种通用方法,其中S
和R
由调用代码定义。因此,对于您发布的示例,S
的类型为sender
(最有可能是object
),而R
的类型为args
(最可爱EventArgs
}})。
Action<S, R>
是一个委托,它接受两个参数,但不返回任何内容。需要返回值的委托是Func<T, TResult>
,其中TResult
是返回值的类型。