簡體   English   中英

為什么我可以在App_Code中訪問ASP.NET項目而不是MVC2項目的靜態類方法?

[英]Why can I access static class method in App_Code for an ASP.NET project NOT for an MVC2 Project?

在同一個asp.net MVC2項目中 (當它是純ASP.NET項目時沒有問題),我在App_Code中創建了兩個沒有命名空間的類,一個是普通類,另一個是靜態的。

我可以從任何地方訪問實例類的公共方法,而不能訪問靜態類的公共方法。 為什么呢 那我該如何訪問它們呢?

    public class MyWebservice
    {

        public stMyWebservice()
        {                                       

        }

        public String getText() {
        }
    }


    public static class Helper
    {

        public static String getText()
        {




        }
    }

我這樣訪問index.aspx內部的靜態類:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        Helper.getText();                  
    }
</script>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2><%: ViewData["Message"] %></h2>
    <p>
        To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
    </p>
</asp:Content>

確保該類的Build Action設置為Compile

轉到您的App_Code文件夾,然后選擇您的課程。 在屬性頁面中查找。 找到Build Action 將其設置為Compile 然后,您應該可以在應用程序中的其他位置訪問該對象的方法和屬性。

您的靜態類應該像其他類一樣可訪問。 我猜你是在沒有public訪問修飾符的情況下聲明了靜態類,例如:

static class MyClass
{
}

如果以這種方式聲明該類,則它將具有internal訪問修飾符。 這意味着,它將可以在組裝中訪問。 App_Code文件夾編譯為單個程序集,如果嘗試在App_Code文件夾之外使用類,則會收到錯誤消息。

編輯:更多-在這種情況下,是否將類聲明為static沒有區別。 如果這些類具有相同的訪問修飾符,則可以在第二個類所在的位置訪問每個類。

因此,由於沒有提供確切的類聲明,所以我的第二個猜測是:您已在非靜態類中聲明了靜態類,例如:

public class MyWebservice
{
    public static class Helper
    {
        public static String getText()
        {
        }
    }
}

在這種情況下,也可以通過父類名稱訪問靜態類:

var text = MyWebservice.Helper.getText()

最后,我創建了一個簡單的網站來演示這一點,並將其發布到google docs上

編輯II:您的上一次編輯顯示您實際上有一個Web應用程序 ,而不是一個網站。 對於Web應用程序,不需要App_Code文件夾。 在網站上,類文件在運行時動態編譯,並且必須位於App_Code文件夾中。 在Web應用程序中,所有內容都是靜態編譯的,並且類文件可以存在於Web應用程序中的任何位置。

在那種情況下,我會在文件夾中代碼文件的錯誤Build Action中看到此行為的原因。 我猜它設置為Content但是應該設置為Compile (可以通過在代碼文件上按F4來實現)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM