这个语法是什么“myMethod <s,r =”“>”?</s,>

时间:2013-12-16 20:09:29

标签: c# .net-3.5

我正在研究这个项目,遇到了一些我不太懂的代码......

_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是多少?我推断它们是某种通用类型,允许“模糊”参数(st),但我没有看到S或R在何处/如何设置。< / p>

1 个答案:

答案 0 :(得分:1)

是的,这是一种通用方法,其中SR由调用代码定义。因此,对于您发布的示例,S的类型为sender(最有可能是object),而R的类型为args(最可爱EventArgs }})。

Action<S, R>是一个委托,它接受两个参数,但不返回任何内容。需要返回值的委托是Func<T, TResult>,其中TResult是返回值的类型。