ASP.NET 2.0 解决了 Code-Behind 需要控件声明同步的问题
這顯然是一個非常明智而且很早就應該實現的做法,因為已經在HTML中聲明為runat="server"的控件,就應該算是聲明過,還要在code-behind中同步的用C#代碼再聲明一個同名控件顯然是違反了《程序員修煉之道》中所謂的DRY(Don't Repeat Yourself)原則。
原本ASP.NET 1.x的編譯模型是編譯站點時先編譯code-behind部分,然后得到code-behind部分的Page派生類,等到運行時再編譯aspx部分此事得到code-behind部分的派生類(也就是Page的二級派生類),而一旦aspx和code-behind出現控件聲明的不同步那么這個繼承關系將出現問題。
ASP.NET 2.0的做法就是把aspx和code-behind都看作Page派生類的partial class,并且合成編譯,而aspx中所有的控件聲明都將在編譯時自動轉換為C#聲明,這樣的好處是只有一層Page派生類而且不用同步什么東西,所有東西都是僅聲明一次。不過有一個問題就是,到底aspx中的聲明是轉換為C#的partial class再編譯還是能夠直接編譯呢?轉換為C#編譯是很直接的思路,ASP.NET 2.0 的內部變化也是說原本由VS.NET 2002/2003做的聲明同步工作現在交給ASP.NET Runtime了,但是這樣就有一個問題,如果要開發一種新的ASP.NET語言(例如Delphi for ASP.NET 2.0),那么也就必須建立aspx到該語言的翻譯,這是十分麻煩的事情。但是如果aspx和code-behind分開編譯的話,這好像超出了partial class的能力范圍,根據C# 2.0的規范,partial class的所有部分必須是同時編譯的,不可以是增量編譯的,也不可以是跨語言編譯的,而aspx和code-behind都直接編譯的話就需要雙語言編譯,也就需要增量編譯。
ASP.NET 2.0還有一個很好的地方,就是部署編譯,你能夠把整個網站都編譯了(包括aspx和code-behind)然后發布,發布目標的aspx將是一個僅引用后臺類的控文件,這樣性能最好而且也不用擔心代碼泄漏(特別是編譯后的dll再混淆一下的話)。不過因為aspx部分也編譯了,所以這樣發布的網站發布之后就不能改動。而ASP.NET 2.0還提供另一個極端,就是完全運行時編譯。以前ASP.NET 1.x如果是code-behind的話,code-behind部分就必須在VS.NET里面先編譯,不過現在ASP.NET 2.0能夠自動監測code-behind部分是否有改動過(甚至是/App_Code目錄下的其他非UI邏輯的code),如果有就運行時編譯,這對于調試來說是挺方便的,不需要每次調時前先在VS.NET里面按Ctrl+Shift+B編譯。
總結
以上是生活随笔為你收集整理的ASP.NET 2.0 解决了 Code-Behind 需要控件声明同步的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将BLOG作为输入平台 ……
- 下一篇: 哪种网络访问控制方法最适合?