为啥我不能在继承属性中为封闭的泛型使用 C# 语法,但 CLR 语法很好

Posted

技术标签:

【中文标题】为啥我不能在继承属性中为封闭的泛型使用 C# 语法,但 CLR 语法很好【英文标题】:Why can't I use C# Syntax in the Inherits Attribute for a Closed Generic but CLR Syntax is fine为什么我不能在继承属性中为封闭的泛型使用 C# 语法,但 CLR 语法很好 【发布时间】:2011-01-15 20:30:25 【问题描述】:

以下 CLR 语法在我的 aspx 页面中运行良好:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="Website.MyBasePage`1[HomePageViewModel]" %>

但是这个 C# 语法没有:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="Website.MyBasePage<HomePageViewModel>" %>

注意,我没有使用 ASP.NET MVC,但如果使用来自 ASP.NET MVC 的System.Web.Mvc.ViewPage&lt;&gt;,则效果很好。

我的MyBasePage 看起来像这样:

public class MyBasePage<TModel> : Page where TModel : class 
    public TModel Model
    
        get  return (TModel)HttpContext.Current.Items["model"]; 
    

【问题讨论】:

【参考方案1】:

了解您遇到的异常会有所帮助,但我怀疑问题在于 ASP.net 不直接支持通用页面基类。它是在 MVC 中使用一些 hack 实现的。

如果您正在使用 Web 表单,您可以自己重复此 hack,这应该会有所帮助:

Generic Inherited ViewPage<> and new Property

【讨论】:

詹姆斯 - 感谢您的链接。我想你准确地指出了发生了什么。为了记录,我得到的错误是:解析器错误描述:解析服务此请求所需的资源期间发生错误。请查看以下特定的解析错误详细信息并适当地修改您的源文件。解析器错误消息:无法加载类型“Website.MyBasePage”。

以上是关于为啥我不能在继承属性中为封闭的泛型使用 C# 语法,但 CLR 语法很好的主要内容,如果未能解决你的问题,请参考以下文章

第2张 C#中的泛型

为啥 TS 中的泛型接口不能正确推断类型?

多类型参数约束的C#泛型语法[重复]

C# 语言:泛型、打开/关闭、绑定/未绑定、构造

在 C# XML 文档中引用泛型类型的泛型类型?

C#中的泛型和泛型集合