日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET 2.0 解决了 Code-Behind 需要控件声明同步的问题

發布時間:2025/1/21 asp.net 74 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 需要控件声明同步的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。