C# 继承问题

本文关键字:问题 继承 | 更新日期: 2023-09-27 18:32:47

再说一次,我对这种事情相当陌生,也许错误消息告诉我它是什么,我根本不明白,但是......这段代码是匿名的.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:确保此代码文件中定义的类与"inherits"属性匹配,并且它扩展了正确的基类(例如 Page 或 UserControl)。

如果我将其从

public class CasLogin : System.Web.UI.Page

public class CasLogin : Page

我收到此错误:

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

C# 继承问题

如果我将其从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会自动处理所有这些,这不是问题。

我很确定它应该是

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

对于您可以使用的其他错误

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

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

继承需要:

Inherits="cheese.pies.org.CasLogin"

看看我自己的小测试项目/代码,我看到了一些明显不同的东西:"usings"出现在命名空间声明之前,以及使用分部类来隐藏代码。另请注意,继承具有完全限定的类(包括命名空间)。

默认.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2._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
    {