C# - 非静态字段,方法或属性需要对象引用

时间:2012-05-08 19:08:41

标签: c# asp.net inheritance object include

所以我有两个功能,我遇到了一个有趣的问题。基本上我的目标是在一个易于包含的cs文件中使我的代码更具可移植性。

这是cs文件:

namespace basicFunctions {
public partial class phpPort : System.Web.UI.Page {
    public string includer(string filename) {
        string path = Server.MapPath("./" + filename);
        string content = System.IO.File.ReadAllText(path);
        return content;
    }
    public void returnError() {
        Response.Write("<h2>An error has occurred!</h2>");
        Response.Write("<p>You have followed an incorrect link. Please double check and try again.</p>");
        Response.Write(includer("footer.html"));
        Response.End();
    }
}
}

以下是引用它的页面:

<% @Page Language="C#" Debug="true" Inherits="basicFunctions.phpPort" CodeFile="basicfunctions.cs" %>
<% @Import Namespace="System.Web.Configuration" %>

<script language="C#" runat="server">
void Page_Load(object sender,EventArgs e) {
    Response.Write(basicFunctions.phpPort.includer("header.html"));
    //irrelevant code
    if ('stuff happens') {
        basicFunctions.phpPort.returnError();
    }
    Response.Write(basicFunctions.phpPort.includer("footer.html"));
}
</script>

我得到的错误是上面列出的错误,即:

Compiler Error Message: CS0120: An object reference is required for the non-static field, method, or property 'basicFunctions.phpPort.includer(string)'

2 个答案:

答案 0 :(得分:2)

您需要一个phpPort类的实例,并且您在其上定义的所有方法都不是静态的。

由于您位于此类的继承aspx页面上,因此当它加载时 是该类的一个实例,您可以调用对它的方法直接。

您需要修改代码才能直接使用这些功能:

void Page_Load(object sender,EventArgs e) {
    Response.Write(includer("header.html"));
    //irrelevant code
    if ('stuff happens') {
        returnError();
    }
    Response.Write(includer("footer.html"));
}

答案 1 :(得分:0)

如果要将basicFunctions.phpPort.includer作为静态方法调用,则需要使用static关键字,如下所示:

public static void returnError
public static string includer

如果您没有进行静态呼叫,则您的基页需要从“此”

进行呼叫
if ('stuff happens') {
    this.returnError();
}