自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Visual Studio 2005的那些事兒

原創(chuàng)
開發(fā) 后端
本文是Visual Studio進(jìn)化史專題系列文章中,關(guān)于Visual Studio 2005的一篇。我們要說的,是關(guān)于VS2005的那些事兒。

【51CTO獨(dú)家特稿】2010年4月12日是微軟Visual Studio 2010正式版發(fā)布的日子。作為Visual Studio的用戶,您是否還記得自己使用的第一個(gè)Visual Studio版本?是否還記得CODE出第一段代碼時(shí)的興奮?是否還記得那無數(shù)個(gè)尋找Bug的日日夜夜?51CTO開發(fā)頻道帶您一起走進(jìn)Visual Studio歷史,今天我們要介紹的是——Visual Studio 2008。

前言:4月份就要發(fā)布Visual Studio2010了,它的Beta2版我已經(jīng)從網(wǎng)上下載下來嘗鮮了,對(duì)于普通開發(fā)人員來說,VS2010與時(shí)俱進(jìn)地增加了很多新的特性以適應(yīng)新的開發(fā)要求,比如增加了多定向支持、并行計(jì)算和云計(jì)算等,并且在VS2010中也針對(duì)VC++做了很大的支持。

作為一個(gè).NET開發(fā)人員,我經(jīng)歷了支持.NET開發(fā)的VS的各個(gè)版本。下面一個(gè)開發(fā)人員的角度來談?wù)勎覍?duì)Visual Studio 2005的感受。

記得最早我練習(xí)ASP.NET是用Dreamweaver來練習(xí)的,C#代碼和HTML都在一個(gè)ASPX頁面中,很不方便管理。后來別人向我介紹了VS2002,這是第一個(gè)支持.NET開發(fā)VS開發(fā)工具,它所支持的.NET版本是.NET 1.0。它采用了網(wǎng)頁與代碼分離的模式,是開發(fā)人員可以將主要注意力放在業(yè)務(wù)邏輯處理上,大大提高了開發(fā)速度。

Visual Studio 2002推出沒多久微軟就推出了Visual Studio 2003,Visual Studio 2003支持的.NET版本是.NET 1.1,普通的開發(fā)人員可能都不知道Visual Studio 2002與Visual Studio 2003及.NET 1.0與.NET 1.1之間有哪些區(qū)別。

Visual Studio 2005的當(dāng)年的推出讓大家馬上感覺到有很大的變化,有點(diǎn)耳目一新的感覺。

在編程語法特性上增加了泛型、可空類型等。

泛型

在Visual Studio 2005以前即使遇到特定集合類型,也只能使用通用的集合類型來存儲(chǔ),這樣一來在集合中存取值類型數(shù)據(jù)時(shí)存在著裝箱和拆箱過程,而且由于在.NET1.1中集合類型被設(shè)計(jì)成用來存儲(chǔ)object對(duì)象,所以無法對(duì)存入的數(shù)據(jù)的類型進(jìn)行保證,在Visual Studio 2005中這個(gè)得到了解決,那就是泛型集合。

例如,在Visual Studio 2003中的實(shí)現(xiàn):

  1. /// <summary> 
  2. /// 使用ArrayList的例子  
  3. /// summary> 
  4. public void ArrayListDemo()  
  5. {  
  6.     //聲明一個(gè)集合,只存儲(chǔ)int類型數(shù)據(jù)  
  7.     ArrayList integerList = new ArrayList();  
  8.     integerList.Add(1);//沒有問題  
  9.     integerList.Add("one");//可以添加  
  10.  
  11.     for (int i = 0; i < integerList.Count; i++)  
  12.     {  
  13.         int value = (int)integerList[i];//對(duì)第二個(gè)數(shù)操作時(shí)會(huì)拋出異常  
  14.     }  
  15. }  
  16. 在Visual Studio 2005中的實(shí)現(xiàn):  
  17. /// <summary> 
  18. /// 使用泛型集合的例子  
  19. /// summary> 
  20. public void ListDemo()  
  21. {  
  22.     //聲明一個(gè)只存儲(chǔ)int類型數(shù)據(jù)的泛型集合  
  23.     List<int> integerList = new List<int>();  
  24.     integerList.Add(1);//沒有問題  
  25.     //integerList.Add("one");//此句不能編譯通過  
  26.  
  27.     for (int i = 0; i < integerList.Count; i++)  
  28.     {  
  29.         int value = integerList[i];//此處無需做類型轉(zhuǎn)換  
  30.     }  

 

using關(guān)鍵字

using關(guān)鍵是用引入命名空間之外,在Visual Studio 2005中還可以用來釋放一些實(shí)現(xiàn)了IDisposable接口的類,using 語句按照正確的方式調(diào)用對(duì)象上的 Dispose 方法,并(在您按照前面所示方式使用它時(shí))會(huì)導(dǎo)致在調(diào)用 Dispose 時(shí)對(duì)象自身處于范圍之外。在 using 塊中,對(duì)象是只讀的并且無法進(jìn)行修改或重新分配。using 語句確保調(diào)用 Dispose,即使在調(diào)用對(duì)象上的方法時(shí)發(fā)生異常也是如此。通過將對(duì)象放入 try 塊中,并在調(diào)用 finally 塊中的 Dispose,可以獲得相同的結(jié)果;實(shí)際上,這就是編譯器轉(zhuǎn)換 using 語句的方式。

比如執(zhí)行對(duì)數(shù)據(jù)庫(kù)的增刪改查操作,在Visual Studio 2005以前我們可能會(huì)這么寫:

  1. /// <summary> 
  2. /// 執(zhí)行Update/Delete/Insert類型的SQL語句,并返回受影響的行數(shù)  
  3. /// summary> 
  4. /// <param name="sql">要執(zhí)行的Update/Delete/Insert類型的SQL語句param> 
  5. /// <param name="commandType">執(zhí)行SQL語句的類型,如是文本型還是存儲(chǔ)過程param> 
  6. /// <param name="parameters">執(zhí)行存儲(chǔ)過程時(shí)所需要的參數(shù)param> 
  7. /// <returns>returns> 
  8. public int ExecuteNonQuery(string sql, CommandType commandType, SqlParameter[] parameters)  
  9. {  
  10. //定義SqlConnection對(duì)象  
  11. SqlConnection connection = null;  
  12. //定義SqlCommand對(duì)象  
  13. SqlCommand command = null;  
  14. //定義執(zhí)行語句之后受影響的行數(shù)  
  15. int affectedRows = 0;  
  16. try  
  17. {  
  18.     connection = new SqlConnection(connectionString);  
  19.     command = new SqlCommand(sql, connection);  
  20.     foreach (SqlParameter parameter in parameters)  
  21.     {  
  22.         command.Parameters.Add(parameter);  
  23.     }  
  24. command.CommandType = commandType;  
  25.     connection.Open();//打開連接  
  26.     //執(zhí)行對(duì)數(shù)據(jù)庫(kù)的操作  
  27.     affectedRows = command.ExecuteNonQuery();  
  28. }  
  29. finally//在finally中執(zhí)行關(guān)閉和釋放SqlConnection及SqlCommand的操作  
  30. {  
  31.     if (connection != null && connection.State == ConnectionState.Open)  
  32.     {  
  33.         connection.Close();  
  34.     }  
  35.     if (command != null)  
  36.     {  
  37.         command.Dispose();  
  38.     }  
  39. }  
  40. return affectedRows;  
  41. }  
  42. 在Visual Studio 2005中我們完全可以這么寫:  
  43. /// <summary> 
  44. /// 執(zhí)行Update/Delete/Insert類型的SQL語句,并返回受影響的行數(shù)  
  45. /// summary> 
  46. /// <param name="sql">要執(zhí)行的Update/Delete/Insert類型的SQL語句param> 
  47. /// <param name="commandType">執(zhí)行SQL語句的類型,如是文本型還是存儲(chǔ)過程param> 
  48. /// <param name="parameters">執(zhí)行存儲(chǔ)過程時(shí)所需要的參數(shù)param> 
  49. /// <returns>returns> 
  50. public int ExecuteNonQuery(string sql, CommandType commandType, SqlParameter[] parameters)  
  51. {  
  52. //定義執(zhí)行語句之后受影響的行數(shù)  
  53. int affectedRows = 0;  
  54. using (SqlConnection connection = new SqlConnection(connectionString))  
  55. {  
  56.     using (SqlCommand command = new SqlCommand(sql, connection))  
  57.     {  
  58.         command.CommandType = commandType;  
  59.         foreach (SqlParameter parameter in parameters)  
  60.         {  
  61.             command.Parameters.Add(parameter);  
  62.         }  
  63.         connection.Open();//打開連接  
  64.         //執(zhí)行對(duì)數(shù)據(jù)庫(kù)的操作  
  65.         affectedRows = command.ExecuteNonQuery();  
  66.     }  
  67. }  
  68. return affectedRows;  

 

通過是用using語句大家可以明顯看出代碼更簡(jiǎn)潔了,并且是用using語句之后的效果和使用try{}finally{}的效果是一樣的。

安全的類型轉(zhuǎn)換

在開發(fā)中經(jīng)常存在一些轉(zhuǎn)換,比如從字符串類型轉(zhuǎn)換成數(shù)值類型及從一種引用類型轉(zhuǎn)換成另一種引用類型,在早期的版本中一旦出現(xiàn)不能轉(zhuǎn)換的情況就會(huì)拋出異常,實(shí)際上系統(tǒng)處理異常的開銷比較大,因而沒有必要在所有情況下都拋出異常,在Visual Studio 2005中針對(duì)這種情況進(jìn)行了改進(jìn)。

如下:

  1. /// <summary> 
  2. /// VS2003中的寫法  
  3. /// summary> 
  4. public void VS2003()  
  5. {  
  6.     int version1 = 0;  
  7.     //下面的轉(zhuǎn)換如果不成功就會(huì)拋出異常  
  8.     version1 = int.Parse("zhoufoxcn");//這句會(huì)拋出異常  
  9.  
  10.     object str = "Hello Visual Studio 2005";  
  11.     //下面轉(zhuǎn)換如果失敗就會(huì)拋出異常  
  12.     Button btn = (Button)str;//因?yàn)閟tring類型與Button類型之間不能轉(zhuǎn)換,所以會(huì)拋出異常  
  13.       
  14. }  
  15. /// <summary> 
  16. /// Visual Studio 2005及更高版本的做法  
  17. /// summary> 
  18. public void Visual Studio 2005()  
  19. {  
  20.     int version2;  
  21.     //如果轉(zhuǎn)換成功parseSuccess為true,version2為對(duì)應(yīng)字符串轉(zhuǎn)換成的數(shù)值  
  22.     //如果轉(zhuǎn)換不成功則parseSuccess為false,version2的值不可用  
  23.     bool parseSuccess = int.TryParse("zhoufoxcn", out version2);//這句永遠(yuǎn)不會(huì)拋出異常  
  24.     if (parseSuccess)  
  25.     {  
  26.         //這里使用轉(zhuǎn)換后的數(shù)值  
  27.     }  
  28.  
  29.     object str = "Hello Visual Studio 2005";  
  30.     //下面轉(zhuǎn)換如果成功則btn不為null  
  31.     //如果不成功則btn為null,但是不會(huì)拋出異常  
  32.     Button btn = str as Button;//因?yàn)閟tring類型與Button類型之間不能轉(zhuǎn)換,所以btn為null  
  33.     if (btn != null)  
  34.     {  
  35.         //這里處理能轉(zhuǎn)換的情況  
  36.     }  

 

局部類

在Visual Studio 2005中還引入了局部類的概念,這樣對(duì)一個(gè)類的定義可以放在多個(gè)物理文件中,在編譯的時(shí)候編譯器會(huì)自動(dòng)將屬于統(tǒng)一個(gè)類的代碼編譯成一個(gè)完整的類定義。

如下面的代碼:

  1. ///   
  2. /// Person類的部分定義1,物理文件名為Person1.cs  
  3. ///   
  4. public partial class Person  
  5. {  
  6.     public int Age { getset; }  
  7. }  
  8. ///   
  9. /// Person類的部分定義2,物理文件名為Person2.cs  
  10. ///   
  11. public partial class Person  
  12. {  
  13.     public string Name { getset; }  

 

編譯的時(shí)候會(huì)將這兩部分編譯到一個(gè)完整的類定義中,最終編譯的Person類總會(huì)有Age和Name兩個(gè)屬性。這種情況應(yīng)用在WinForm開發(fā)和ASP.NET開發(fā)中都有體現(xiàn),在WinForm中假如有一個(gè)窗體名為Form1,那么就有Form1.cs和Form1.designer.cs兩個(gè)物理文件都是Form1類的局部類。在ASP.NET中一個(gè)ASPX頁面對(duì)應(yīng)的aspx.cs也是一個(gè)局部類。使用局部類的好處是可以將展示代碼和邏輯代碼分開,最終編譯時(shí)會(huì)生成一個(gè)完整的類的定義。

在ASP.NET開發(fā)中也增加了很多亮點(diǎn),比如增強(qiáng)了可視化編程,在VS2003中用戶控件在被使用的頁面處于設(shè)計(jì)視圖下不是可視化的,只能在運(yùn)行后才能看到用戶控件最終的樣子,這個(gè)在開發(fā)時(shí)多少有些不方便。除此之外還增加了如下功能:增加了ASP.NET Development Server組件、內(nèi)置文件夾、母版頁及主題等。

ASP.NET Development Server

 

圖 ASP.NET Development Server

在VS2002及VS2003中開發(fā)ASP.NET應(yīng)用程序只能使用IIS,每個(gè)ASP.NET應(yīng)用都會(huì)作為IIS的一個(gè)網(wǎng)站或者虛擬目錄,因?yàn)殚_發(fā)者的機(jī)器上必須安裝IIS,而且最好按照先安裝IIS再安裝VS的步驟進(jìn)行,否則就需要向IIS注冊(cè).NET Framework(早年我曾經(jīng)為這個(gè)問題抓狂過,所以我在《ASP.NET夜話》第一章中特地說了這個(gè)注意事項(xiàng))。而且使用這種開發(fā),部署和調(diào)試都不是太方便,因?yàn)槟J(rèn)的ASP.NET應(yīng)用會(huì)在IIS根目錄下創(chuàng)建虛擬目錄,如果沒有更改的話一點(diǎn)系統(tǒng)出現(xiàn)問題不能啟動(dòng)恐怕你的代碼也不好找回來了(這種情況我也遇見過)。

在Visual Studio 2005中內(nèi)置了ASP.NET Development Server這個(gè)組件,這樣開發(fā)者的機(jī)器上就不必再安裝IIS了,而且我們可以基于文件系統(tǒng)開發(fā),這樣我們可以任意指定ASP.NET應(yīng)用程序的存放位置,這樣調(diào)試和部署起來就相當(dāng)方便了,源代碼管理也很方便。自從出現(xiàn)了ASP.NET Development Server這個(gè)組件之后很多ASP.NET開發(fā)人員甚至干脆不在開發(fā)的機(jī)器上安裝IIS這個(gè)組件了,取而代之的就是ASP.NET Development Server這個(gè)組件(如果部署ASP.NET應(yīng)用仍需要專業(yè)的Web服務(wù)器)。

母版頁

在我們做Web應(yīng)用的時(shí)候,經(jīng)常會(huì)遇到一些頁面之間有很多相同的顯示部分和行為,如果每個(gè)頁面都去重復(fù)編寫這些代碼,那就是一件非常麻煩的事情。因此在ASP.NET2.0中提出了母板頁的概念,我們可以把多個(gè)頁面之間相同的行為和顯示部分放到母板頁中,只需要為每個(gè)頁面編寫不同的部分即可,這樣如果我們對(duì)公共部分需要變化僅僅更改母板頁就能達(dá)到目的。母板頁的文件后綴名為.master,一個(gè)網(wǎng)站中允許定義多個(gè)母板頁。

母板頁不能單獨(dú)呈現(xiàn),也就是我們不能在瀏覽器中直接輸入母板頁的url地址進(jìn)行訪問,必須依賴于內(nèi)容頁才能呈現(xiàn)。

下面是新建一個(gè)母板頁的源代碼:

  1. <%@ Master Language="C#" AutoEventWireup="true" CodeFile="FrontPage.master.cs" Inherits="FrontPage" %> 
  2.  
  3. > 
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml" > 
  6. <head runat="server"> 
  7.     <title>無標(biāo)題頁title> 
  8. head> 
  9. <body> 
  10.     <form id="form1" runat="server"> 
  11.     <div> 
  12.         <asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> 
  13.         asp:contentplaceholder> 
  14.     div> 
  15.     form> 
  16. body> 
  17. html> 

 

在母板頁中有一個(gè)“”標(biāo)記,這相當(dāng)于一個(gè)占位標(biāo)記,將來使用了這個(gè)母板頁的內(nèi)容頁中的內(nèi)容將在這個(gè)標(biāo)記中顯示。因?yàn)槟赴屙撘呀?jīng)包含了

 
標(biāo)記,所以內(nèi)容頁中不允許再出現(xiàn)這些標(biāo)記。

而一個(gè)內(nèi)容頁的代碼如下:

  1. <%@ Page Language="C#" MasterPageFile="~/FrontPage.master" AutoEventWireup="true" 
  2. CodeFile="MyPage.aspx.cs" Inherits="MyPage" Title="Untitled Page" %> 
  3. <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 
  4. asp:Content> 

 

在內(nèi)容頁中有一個(gè)標(biāo)記,內(nèi)容頁的代碼只有放在這個(gè)標(biāo)記之間的代碼將來運(yùn)行時(shí)才會(huì)可見。

通過母版頁使我們?cè)谝唤M頁面間共享結(jié)構(gòu)和內(nèi)容更加方便。

內(nèi)置文件夾

如果我們使用Visual Studio 2005及更高版本,我們可能會(huì)注意到以下情況:

文件目錄

  

可以看到同樣是文件夾,App_Data目錄和js目錄的圖標(biāo)在Visual Studio 2005中就是不一樣,像App_Data這類文件夾的就是內(nèi)置文件夾,在運(yùn)行的時(shí)候Web服務(wù)器會(huì)對(duì)這類文件夾有特殊的措施,比如像App_Data這類文件夾是不能直接在瀏覽器地址欄里輸入U(xiǎn)RL進(jìn)行訪問的。這樣如果我們采用的是文件型數(shù)據(jù)庫(kù)的話(如Access),我們就可以將mdb文件放到這個(gè)文件夾下,這樣即使別人知道URL地址正確的URL地址也沒有辦法通過URL來下載,而在Visual Studio 2005及以前版本中,我們只能通過其它辦法保護(hù)自己的敏感數(shù)據(jù)了。

更方便的ASP.NET應(yīng)用程序發(fā)布方式

在VS2002和VS2003中沒有提供脫離源代碼發(fā)布ASP.NET應(yīng)用的方式,這樣一來開發(fā)的ASP.NET就需要將源代碼連同項(xiàng)目一起提供給使用者(個(gè)人客戶或者公司客戶),這樣一來整個(gè)項(xiàng)目的細(xì)節(jié)全部暴露給了使用者,而現(xiàn)在軟件公司的開發(fā)模式基本上都是不提供源代碼給使用者,所以在早期很多開發(fā)人員都在想辦法讓ASP.NET應(yīng)用程序中的cs文件編譯進(jìn)dll中發(fā)布,早期筆者也曾經(jīng)這么做過,配置和操作過程比較復(fù)雜,而在Visual Studio 2005中這個(gè)就不再是問題了,在Visual Studio 2005中可以一鍵解決這個(gè)問題。

在Visual Studio 2005中鼠標(biāo)右鍵點(diǎn)擊ASP.NET應(yīng)用項(xiàng)目,在彈出的菜單中選擇“發(fā)布網(wǎng)站”就會(huì)彈出發(fā)布網(wǎng)站的對(duì)話框,選擇一個(gè)目錄之后就可以發(fā)布了。發(fā)布網(wǎng)站成功之后就可以將發(fā)布成功后的文件夾(包含了整個(gè)ASP.NET應(yīng)用正確運(yùn)行的全部資源,如css、javascript、html和ASPX及dll)部署到Web服務(wù)器上,更改開發(fā)中的環(huán)境配置為運(yùn)行時(shí)的環(huán)境配置即可正常運(yùn)行和瀏覽了。比起以前的版本,這個(gè)過程極其方便。

除此之外,還增加了GridView、TreeView等控件使我們的開發(fā)效率大大提高了。而AccessDataSource、SqlDataSource、ObjectDataSource數(shù)據(jù)源控件的引入使得新手更加容易上手了。

總結(jié)

Visual Studio 2005是一款非常成功的產(chǎn)品,起著很重要的承上啟下的作用。它是對(duì)VS2003等以前版本的質(zhì)的提高,有很多功能比如類型轉(zhuǎn)換、代碼段管理、母版頁、網(wǎng)站發(fā)布、using語句等語法和編譯器功能是筆者從Visual Studio 2005后一直都在使用,這些特性確實(shí)方便了代碼編寫和調(diào)試,有些還能提高程序的健壯性和性能,從而也提高了開發(fā)人員的開發(fā)效率。

Visual Studio 2005歷史回放

Visual Studio 2005專業(yè)版外包裝盒

舊金山當(dāng)?shù)貢r(shí)間2005年11月7日。在Cheap Trick樂隊(duì)的音樂助威聲中,微軟終于正式發(fā)布了Visual Studio 2005和SQL Server 2005。微軟公司CEO Steve Ballmer出席了發(fā)布儀式。

SQL Server的上次升級(jí)已經(jīng)是五年前的事情了,而這次二者新版本的發(fā)布加上剛剛發(fā)布的.NET Framework 2.0,都是為2006年Windows Vista而作的一種準(zhǔn)備。Ballmer承認(rèn)它們來得有些晚了,不過他重點(diǎn)強(qiáng)調(diào)了新版本的一些重大改進(jìn)。

Visual Studio 2005極大地改進(jìn)了性能表現(xiàn)和安全性,以滿足微軟所謂的“企業(yè)級(jí)(enterprise-grade)”應(yīng)用。同時(shí)微軟還發(fā)布了高端版本的Visual Studio 2005 Team System,主要針對(duì)程序員、測(cè)試員以及軟件架構(gòu)師,可以在一個(gè)團(tuán)隊(duì)之間建立有效的協(xié)作,其售價(jià)也是不菲,高達(dá)$10939。

[[9878]]

Visual Studio 2005安裝光盤

作者簡(jiǎn)介

周金橋,網(wǎng)名周公,微軟2008年7月MVP,51CTO專家堂成員。微軟山西.NET俱樂部技術(shù)負(fù)責(zé)人。超過6年的Web開發(fā)經(jīng)驗(yàn),擅長(zhǎng)ASP.NET、程序性能和安全優(yōu)化。

[[9879]]

【編輯推薦】

  1. Visual Studio 2005 IDE的使用技巧和竅門
  2. 在VS 2005和ASP.NET 2.0中處理CSS樣式表
  3. 用VS2005.NET進(jìn)行三層結(jié)構(gòu)應(yīng)用程序的開發(fā)
  4. 在Visual Studio 2005中實(shí)現(xiàn)VB重構(gòu)
  5. 詳細(xì)概述VS2005配置環(huán)境的具體配置

 

 

責(zé)任編輯:楊鵬飛 來源: 51CTO
相關(guān)推薦

2009-12-03 15:58:33

Visual Stud

2009-12-04 10:35:56

Visual Stud

2013-08-01 15:12:03

Visual Stud

2011-09-01 16:13:37

Visual StudSQL Server 存儲(chǔ)過程

2009-12-09 14:29:11

Visual Stud

2009-12-04 14:40:43

Visual Stud

2009-11-05 15:43:02

Visual Stud

2009-12-09 16:12:49

Visual Stud

2009-12-04 16:57:52

Visual Stud

2009-12-04 11:17:00

Visual Stud

2009-12-11 09:42:00

Visual Stud

2009-12-16 15:53:34

Visual Stud

2009-12-09 09:40:15

Visual Stud

2009-11-05 13:05:19

Visual Stud

2009-12-15 17:12:18

Visual Stud

2009-12-02 16:41:33

Visual Stud

2009-12-02 16:30:21

Microsoft V

2009-12-04 13:05:54

Visual Stud

2009-12-17 16:32:42

Visual Stud

2011-06-09 15:47:01

Qt Visual Stu
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)