有人可以向我解释以下语法:QueryService <T>(此IServiceProvider serviceProvider,输出T服务)其中T:class

时间:2019-07-12 12:28:56

标签: c# methods syntax

我在C#项目(我不记得是哪个项目)上看到了一段看起来像这样的代码:

public static class ComExt
{
    // ... blablabla ...

    static public void QueryService<T>(this IServiceProvider serviceProvider, out T service) where T : class
    {
        // ... blablabla ...
    }

    static public int QueryInterface(this object provider, ref Guid riid, ref IntPtr ppvObject)
    {
        // ... blablabla ...
    }

但是在第一种方法中,我不理解语法。 尤其是QueryService<T>(this) where T : class

有人可以向我解释该方法发生了什么吗? 也许还有其他使用该语法的示例?

谢谢:)

1 个答案:

答案 0 :(得分:2)

您的问题是标题是用这种方式完成的,可能没有人会搜索它,并且在此处回答可能以后没有任何要点:)。

正如评论中提到的,这些是扩展方法。这意味着它们可以扩展某些常规类的功能。 有关扩展方法的一些信息:

  1. 它们应该在静态类中声明;
  2. 扩展类应该是文件中的第一类。 (在C#中,一个文件中可以有多个类,但是扩展类只有在文件中的第一个才起作用);
  3. 扩展功能也应该是静态的,因为在扩展的关键字“ this”之后有一个动态成员;
  4. 扩展功能的第一个参数应以“ this”关键字(如上所述)开头,因为它告诉编译器扩展了哪个对象。

在您的情况下:static public void QueryService<T>(this IServiceProvider serviceProvider, out T service) where T : class意味着,借助此功能,任何IServiceProvider类型的对象都将能够具有附加的(扩展的)函数QueryService,该函数将采用应为类(而非结构)的通用类型,请参见:{ {1}}。

where T : class表示无法初始化传递的参数(因为out T service尽管out不需要参数初始化)。

用法将是这样的:

ref