【问题标题】:C# Inheritance IssuesC# 继承问题
【发布时间】:2012-05-11 07:01:22
【问题描述】:

再说一次,我对这种事情还很陌生,也许错误消息告诉我它是什么,我只是不明白,但是...... anon.cs 中的这段代码

namespace cheese.pies.org
{
    using System;
    using System.IO;
    using System.Net;
    using System.Web;
    using System.Xml;

    public class CasLogin : System.Web.UI.Page
    {
        private const string CasHost = "notimportant";

        public static string GetId()
        {
        }
}

在此处引用时给我一个错误:

<% @Page Language="C#" Inherits="CasLogin" CodeFile="CasLogin.cs" %>
<script language="C#" runat="server">
protected void Page_Load(object sender, EventArgs e) {
    String directoryId = CasLogin.GetId();
    FormsAuthentication.RedirectFromLoginPage(directoryId, false);
}
</script>

错误在第一行并且是:

编译器错误消息:ASPNET:确保此代码文件中定义的类与“继承”属性匹配,并且它扩展了正确的基类(例如 Page 或 UserControl)。

如果我改变它

public class CasLogin : System.Web.UI.Page

public class CasLogin : Page

我收到此错误:

编译器错误消息:CS0246:找不到类型或命名空间名称“Page”(您是否缺少 using 指令或程序集引用?)

【问题讨论】:

  • 再一次,错误告诉你究竟出了什么问题:你是否缺少 using 指令或程序集引用? - 答案是肯定的。
  • 你在 cheese.pies.org 命名空间中确实有这两个,对吧?确保这些文件的所有命名空间都相同。
  • 另外,如果你的类使用后面的代码,请确保它被定义为部分。例如公共部分类_默认:System.Web.UI.Page

标签: c# asp.net .net inheritance


【解决方案1】:

查看我自己的小测试项目/代码,我发现一些明显不同的地方:“usings”位于命名空间声明之前,而 partial class 用于后面的代码。另外,请注意 Inherits 具有完全限定的类(包括命名空间)。

在 Default.aspx 中

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %>

在 Default.aspx.cs 中

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;
using System.Data;

namespace WebApplication2
{
    public partial class _Default : System.Web.UI.Page
    {

【讨论】:

  • 使用/命名空间的顺序无关紧要,但您对其他项目是正确的。
【解决方案2】:

如果我将其从 public class CasLogin : System.Web.UI.Page 更改为 public class CasLogin : Page我收到这个错误

您缺少 Page 类 (System.Web.UI) 的正确 using 语句,因此当您删除完整限定条件时,编译器将无法再找到 Page 类。

您还应该在 Page 指令中完全限定类名,即Inherits="cheese.pies.org.CasLogin"

<% @Page Language="C#" Inherits="cheese.pies.org.CasLogin" CodeFile="CasLogin.cs" %>

不好

<% @Page Language="C#" Inherits="CasLogin" CodeFile="CasLogin.cs" %>

根据您对缺少 partial 修饰符的评论:

public class CasLogin : System.Web.UI.Page

应该是:

public partial class CasLogin : System.Web.UI.Page

这告诉编译器CasLogin 类是在多个文件中定义的(Web 表单就是这种情况;设计器文件与代码隐藏文件是分开的)。

如果仍然无法正常工作,我建议重新创建页面并将任何相关代码复制到其中。 通常 Visual Studio 会自动处理所有这些,这不是问题。

【讨论】:

  • 不幸的是,在 anon.cs 上包含此 (using System.Web.UI;) 不会改变错误。另外,如果您看上面,则使用 System.Web。
  • 页面不在System.Web,它在System.Web.UI
  • 其实错误变成ASPNET: Make sure that the class defined in this code file matches the 'inherits' attribute, and that it extends the correct base class (e.g. Page or UserControl).
  • 查看我的更新和其他答案;您还需要完全限定 Page 指令中的基类名称。
  • 好的,我已经添加了using System.Web.UI; 并将页面指令更改为&lt;% @Page Language="C#" Inherits="cheese.pies.org.CasLogin" CodeFile="anon.cs" %&gt; 并出现了新错误。嗯,有点老了。它现在冲我大喊Compiler Error Message: CS0260: Missing partial modifier on declaration of type 'cheese.pies.org.CasLogin'; another partial declaration of this type exists
【解决方案3】:

继承必须是:

Inherits="cheese.pies.org.CasLogin"

【讨论】:

    【解决方案4】:

    我很确定应该是这样的

    <% @Page Language="C#" Inherits="cheese.pies.org.CasLogin" CodeFile="CasLogin.cs" %>
    

    您可以使用其他错误

    using System.Web.UI;
    
    public class CasLogin : Page
    

    如果没有完全限定类名,它不知道您在谈论哪个页面,因此您可以在声明类时明确说明,也可以使用 using 语句。第一个错误是同样的问题,在 chees.pies.org 命名空间中看不到 CasLogin 类

    【讨论】:

      猜你喜欢
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 2010-11-25
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多