我在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
有人可以向我解释该方法发生了什么吗? 也许还有其他使用该语法的示例?
谢谢:)
答案 0 :(得分:2)
您的问题是标题是用这种方式完成的,可能没有人会搜索它,并且在此处回答可能以后没有任何要点:)。
正如评论中提到的,这些是扩展方法。这意味着它们可以扩展某些常规类的功能。 有关扩展方法的一些信息:
在您的情况下: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