我对App_Code的理解

个人对App_Code的理解:
建立全站的通用类,打开网站时即时编译App_Code文件夹下面的.cs文件。
在App_Code文件夹下面的.cs文件中的类,在每个文件里都可以调用。。

个人对namespace的理解:
比如:在App_Code/a.cs中有namespace testA
在网站的根目录下的default.aspx.cs文件中也有namespace testA,那么在此文件中就可以直接调用App_Code/a.cs 中的类名。如果在网站的根目录下的default.aspx.cs文件中是namespace testB那么想要使用App_Code/a.cs中有 namespace testA的类名就必须使用以下引用:using testA;

以下是网上摘录的关于App_Code 目录的文章:


ASP.NET 2.0  引入了 App_Code 目录,该目录可以包含一些独立文件,这些文件包含要在应用程序中的多个页之间共享的代码。与 ASP.NET 1.x 不同 (1.x 需要将这些文件预编译到 Bin 目录),App_Code 目录中的所有代码文件都将在运行时动态编译,然后提供给应用程序。可以在  App_Code 目录下放置多种语言的文件,前提是将这些文件划分到各子目录中(在 Web.config 中用特定语言注册这些子目录)。默认情况 下,App_Code 目录只能包含同一种语言的文件。但可以将 App_Code 目录划分为若干子目录(每个子目录包含同一语言的文件)以便可以在  App_Code 目录下包含多种语言。为此,需要在应用程序的 Web.config 文件中注册每个子目录。 
<configuration>
  <system.web>
    <compilation>
      <codeSubDirectories>
        <add directoryName="Subdirectory"/>
      </codeSubDirectories>
    </compilation>
  </system.web>
</configuration>

以上是关于 App_Code 的官方描述。描述中提到“运行时动态编译”,为了弄清楚 App_Code 目录下的文件在何时编译,于是写了段程序进行测试
TestClass.cs
public class TestClass
{
    public static int m_Count = 0;
 public TestClass()
 {
        m_Count++;
 }
    public string GetMessage(string str)
    {
        return "Hello : " + str;
    }
 }
ASPX 页中的代码
<%
    TestClass t = new TestClass();%>
<%=t.GetMessage("SoftDiyer")%><br>
m_Count=<%=TestClass.m_Count%>
我在两个 ASPX (Test1.aspx 和 Test2.aspx)页中放了这些代码,先访 问 Test1.aspx  , m_Count=1;  然后再访问 Test2.aspx m_Count=2;修改 TestClass.cs 中的内容重新访问 Test2.aspx , m_Count =1;由此看出 .net 框架在监视 App_Code 目录,当目录中的文件发生变化时,触发 .net 的动态编译。

App_Code 、 Asp 的 Include 、.Net 中的 Import 的比较:
App_Code 与asp 中的 include 不同:App_Code 采用编译机制而 asp 中的 include 采用的是解释的机制 ,表面上看实现的目的和方式有点类似,但是处理方式完全不同。使用代码目录方式使程序变的更高效更容易维护。
App_Code  和 Import 的不同:从调用代码看区别在于,使用 Import 时必须在文件中使用 Import 语句,而代码目录方式不需要。使用  Import 语句一般是使用已经编译好的类,在运行之前已经编译好了。而代码目录则在运行时编译,这样就增加了程序的灵活性。
posted @ 2009-11-30 23:14  与时俱进  阅读(497)  评论(0编辑  收藏  举报
友情链接:同里老宅院民居客栈