我正在阅读一篇关于移动网络开发和 ASP.NET MVC 的文章:http://www.hanselman.com/blog/ABetterASPNETMVCMobileDeviceCapabilitiesViewEngine.aspx .
在这篇文章中,Scott Hanselman 介绍了创建自己的 View 引擎以根据是否从移动网络浏览器请求站点来呈现不同 View 的过程。
在他的MobileHelpers
类中,他有几个方法的签名对我来说很陌生。这是一个例子:
public static void AddMobile<T>(this ViewEngineCollection ves, Func<ControllerContext, bool> isTheRightDevice, string pathToSearch)
where T : IViewEngine, new()
{
ves.Add(new CustomMobileViewEngine(isTheRightDevice, pathToSearch, new T()));
}
我已经使用过一些像这样的内联函数(我认为这就是它们的名称),但我无法理解这种逻辑。我也不明白 where T : ......
行的目的。
你们能帮我理解这里发生了什么吗?
最佳答案
如果您能确定哪些部分特别让您感到困惑,将会有所帮助。我根据您的问题选择了我认为最有可能的两个,并进行了解释。如果有任何其他语法让您感到困惑,请编辑您的问题以解释是哪一个。
的解释,其中 T : IViewEngine, new()
C# 允许您放置 constraints关于泛型类型参数。您可以阅读有关约束的更多信息 here .
在您的特定情况下,where T : IViewEngine
意味着无论 T
是什么类型,都必须是 IViewEngine
类型的后代。 where T : new()
是一种特殊的语法,表明无论 T
是什么类型,都必须有一个默认构造函数。
这个 ViewEngineCollection ves 的解释
关键字this
表示方法AddMobile
是ViewEngineCollection
类的扩展方法。这意味着除了被称为 AddMobile(someViewEngineCollection, ...)
之外,它还可以被称为 someViewEngineCollection.AddMobile(...)
。您可以阅读有关扩展方法的更多信息 here .
关于c# - 这个 C# 语法有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6861576/