国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

為什么選擇VB.NET?(轉(zhuǎn)貼)

2024-07-10 13:02:42
字體:
供稿:網(wǎng)友
對(duì)于.net,人們比web應(yīng)用程序投入了更大的關(guān)注。vb第一次承諾,可以額外提供對(duì)控制臺(tái)程序以及windows服務(wù)的支持。因?yàn)檫@一點(diǎn),rob macdonald回過頭來問:用vb.net究竟可以做什么?換一句話說,vb.net是否適合你?
目前為止,許多軟件公司(包括microsoft)都將他們的產(chǎn)品壓縮在一個(gè)安裝包里提供給開發(fā)人員。我們就一直忍受著那些令人頭痛的配置和版本匹配的問題。我們?yōu)榱水a(chǎn)品在真實(shí)環(huán)境中的運(yùn)行絞盡腦汁。為了測(cè)試,我們還要花費(fèi)大量的時(shí)間來設(shè)置一個(gè)干凈的機(jī)器。接下來的幾年中,絕大多數(shù)的軟件供應(yīng)商和獨(dú)立軟件開發(fā)工作室將擺脫這樣的工作,原因很簡(jiǎn)單――這太好了。

打個(gè)比方吧,當(dāng)microsoft office xp投入市場(chǎng)時(shí),你既可以選擇按照原來產(chǎn)品包的價(jià)格購(gòu)買,或者支付少量的許可費(fèi)用從而租用一年。將軟件象產(chǎn)品那樣的買賣轉(zhuǎn)變?yōu)樽庥梅?wù)的方式,這就是一部分的轉(zhuǎn)變手段。最終,我想你可以不必在你的pc中(或者pda,手機(jī),冰箱,無論什么)安裝任何東西。你只需要通過永遠(yuǎn)在線的網(wǎng)絡(luò),找到存放你所需要軟件的那臺(tái)服務(wù)器即可。在某些領(lǐng)域,這已經(jīng)是很普遍了(web e-mail服務(wù)就是一個(gè)絕佳的例子)。不過,當(dāng)大多數(shù)的軟件都可以通過這樣的方式快速的獲得時(shí),對(duì)我們這樣的開發(fā)人員來說,是不是合適呢?

因此,從某種程度而言,我認(rèn)為microsoft推出vb.net就是試圖幫助我們這些開發(fā)人員為這些即將來臨的以服務(wù)為中心的范例做好準(zhǔn)備。web服務(wù)之所以受到如此多的關(guān)注,是因?yàn)橥ㄟ^這些技術(shù)(http,xml,soap),任何操作系統(tǒng)(包括windows, linux, ibm, palm)都將有可能以這樣的方式制作并提供各自的服務(wù)。這當(dāng)然也部分解釋了為什么http,xml,soap都是那樣的簡(jiǎn)單。因?yàn)橛?jì)算機(jī)本身就必須“讀懂”他們。

當(dāng)然,并不是所有的應(yīng)用程序都可以通過基于服務(wù)的方式來獲得。vb.net針對(duì)完成桌面上的一些新的、更好的應(yīng)用,提供了一些真正實(shí)際的新特性。舉例而言,在vb6中使用的那些“美麗的”窗體只適用于vb,而在.net中新的windows窗體不單可以提供給其他.net語言使用,而且還有一些重大的創(chuàng)新。我特別高興的看到,它對(duì)窗口縮放的支持,以前這都是需要我自己編寫的,現(xiàn)在我只要簡(jiǎn)單的點(diǎn)擊鼠標(biāo)就可以建立起窗口縮放的規(guī)則。

控制臺(tái)程序

vb.net帶來最大的好處之一就是它允許vb開發(fā)人員實(shí)現(xiàn)一些以前做不了的事。如類的繼承和結(jié)構(gòu)化的錯(cuò)誤處理。另一項(xiàng)讓我們長(zhǎng)久等待的功能就是它可以用來編寫那些通過命令行和用戶交互的應(yīng)用程序了。vb.net使這個(gè)工作變得簡(jiǎn)單,同時(shí)保留了所有.net的功能。

在visual studio.net中,你可以建立一個(gè)新的工程,叫做“控制臺(tái)程序(console application)”。其實(shí),你完全也可以不通過visual studio來建立vb.net的應(yīng)用程序。你真正需要的只是.net framework sdk和記事本,因?yàn)関b編譯器作為一個(gè)完全獨(dú)立的產(chǎn)品,已經(jīng)和visual studio脫離了。(事實(shí)上,無論是編譯vb的程序,還是為已定義的數(shù)據(jù)集自動(dòng)生成源代碼,這些visual studio.net看來神奇的功能,都是通過.net framework中附帶的工具來實(shí)現(xiàn)的。visual studio.net只是把他們集成到了一個(gè)易用的開發(fā)環(huán)境中。作為獨(dú)立的命令行軟件他們都是可用的。)

就讓我們用命令行的方式建立一個(gè)命令行的程序吧。以下為我在記事本中輸入的一些文本,并把它保存為文件“speaktome.vb”:

imports system
imports microsoft.visualbasic
module module1
  sub main()
      dim i, count as integer
      try
        count = cint(command())
        for i = 1 to count
            console.writeline("hello")
        next
      catch
        console.writeline("invalid argument")
      end try
  end sub
end module

這段代碼按照count數(shù)值,循環(huán)運(yùn)行若干次,每次按照標(biāo)準(zhǔn)輸出文本流,輸出“hello”。缺省的它就是一個(gè)命令行控制程序。程序通過調(diào)用command()函數(shù)初始化count變量,它取代了我們?cè)趘b6中熟悉返回命令行中在程序名后面出現(xiàn)的所有文本的全局變量command。

盡管這些代碼已經(jīng)是相當(dāng)?shù)闹苯恿耍覀內(nèi)匀恍枰恍┳⒔狻J紫龋覀冏⒁獾揭婚_始它就使用imports申明了對(duì)兩個(gè)名字空間的引用。名字空間system包含了console類,而名字空間microsoft.visualbasic則包含了命令函數(shù),包括全部很多新的功能。當(dāng)你在visual studio中建立一個(gè)vb.net工程時(shí),這些名字空間會(huì)被自動(dòng)的導(dǎo)入,但當(dāng)我們直接使用編譯器的時(shí)候,我們就需要自己手工的添加他們了。并且注意我聲明我那兩個(gè)變量的方式。在vb6中,象這樣的dim聲明,會(huì)建立一個(gè)variant,一個(gè)整數(shù),但在.net中。這種傳統(tǒng)的vb方式徹底消失了,我得到了我所預(yù)期的兩個(gè)整數(shù)。

vb.net編譯器可以處理不同的參數(shù),但當(dāng)我只是將.vb文件作為一個(gè)單一的參數(shù)傳遞給它時(shí),它將編譯一個(gè)和它同名的exe文件。圖1(http://msdn.microsoft.com/library/en-us/dnvbdev01/html/rob0301fig1.jpg)顯示了當(dāng)我編譯完這個(gè)程序時(shí)的控制會(huì)話。(編譯器叫做“vbc”)
命令行的編譯器使得自動(dòng)化的編譯進(jìn)程變得簡(jiǎn)單。能夠編寫控制臺(tái)應(yīng)用程序,對(duì)于vb來說,雖然微不足道但確實(shí)是一次有價(jià)值的擴(kuò)展。

windows服務(wù)

另一種新類型的應(yīng)用程序是windows服務(wù)。除了那些膽大的vb開發(fā)人員,這可能超越了其他人的視野。典型的,這是一些長(zhǎng)久運(yùn)行的程序,而并不需要依靠登錄用戶或客戶程序來保持它的運(yùn)行。它們沒有自己的用戶界面,可以在它們自己獨(dú)有的安全級(jí)別和會(huì)話上下文中運(yùn)行。我們比較熟悉的windows服務(wù)范例包含了從打印池到sql服務(wù)器以及它的分布式事務(wù)協(xié)作(dtc)。

服務(wù)只可以運(yùn)行在nt和2000下運(yùn)行,它們通過microsoft management console (mmc)提供了一個(gè)專門的管理界面。你可以想象,編寫一個(gè)服務(wù)會(huì)涉及到非常多的內(nèi)容,在這里我不可能花費(fèi)太多的篇幅,但是我可以告訴你如何建立一個(gè)簡(jiǎn)單的樣例。

在.net beta1版的在線幫助中,有許多相關(guān)的信息-在寫這篇專欄時(shí)我就在使用beta1版--如果你打算建立一個(gè)可操作的windows服務(wù)程序,你應(yīng)該仔細(xì)的看一看。
我介紹一下我將建立的windows服務(wù)原型,它用來記錄指定的機(jī)器上正在運(yùn)行的進(jìn)程數(shù)量。是的,我知道我可以使用perfmon來實(shí)現(xiàn)這個(gè)功能,不過我只是裝作我想擴(kuò)展我的服務(wù),以便它可以計(jì)算一些統(tǒng)計(jì)功能,并把他們寫入數(shù)據(jù)庫(kù),也許還可以在超過某一個(gè)閥值時(shí),發(fā)mail給我。

我首先開始建立一個(gè)新的visual studio.net應(yīng)用程序,選擇vb作為我的開發(fā)語言,而工程類型則是windows服務(wù)。這個(gè)操作自動(dòng)為我建立了一個(gè)新的類,它是繼承了.net內(nèi)建了system.serviceprocess.servicebase類。同時(shí)它提供給我一個(gè)可視化的設(shè)計(jì)器,一個(gè)圖形化的快速開發(fā)工具,它特別的為那些本身沒有用戶界面的工程。我可以點(diǎn)擊這個(gè)設(shè)計(jì)器,設(shè)定我的服務(wù)的名字(我命名為"process tracking")。接著我從工具欄中拖了兩個(gè)元件到設(shè)計(jì)器中-一個(gè)performancecounter元件、一個(gè)timer元件。我可以設(shè)置通過屬性欄來設(shè)置它們,感覺上他們是那種可視的控件,盡管我不需要一個(gè)窗體來放置它們。我配置timer每60秒激活一次,performancecounter則用來監(jiān)控在我機(jī)器上運(yùn)行的進(jìn)程數(shù)量。你可以在圖2(http://msdn.microsoft.com/library/en-us/dnvbdev01/html/rob0301fig2.jpg)中看見設(shè)計(jì)器和performancecounter元件的屬性設(shè)置。(我可以在設(shè)計(jì)器和代碼窗口之間進(jìn)行切換,就如我建立一個(gè)窗體一樣。)
visual studio生成缺省的sub main,用來處理開始服務(wù)的運(yùn)行。因?yàn)槟愕拇a是從servicebase類中繼承來的,那么在服務(wù)的生命周期中,你可以獲取一些標(biāo)準(zhǔn)事件。這些事件在服務(wù)的生命周期中是至關(guān)重要的。它們是:

• onstart
• onstop
• onpause
• oncontinue
• onshutdown

這些代碼和vb6窗體中的load/unload/activate/deactivate事件非常象。這里是我對(duì)onstart和onstop設(shè)計(jì)的編碼:
protected overrides sub onstart(byval args() _
  as string)
  dim fs as new filestream ( "c:/log.txt", _
      filemode.openorcreate, fileaccess.write)
  dim sw as new streamwriter(fs)
  sw.basestream.seek(0, seekorigin.end)
  sw.writeline("service started: " + cstr(now()))
  sw.close()
end sub

protected overrides sub onstop()
  dim fs as new filestream("c:/log.txt", _
      filemode.openorcreate, fileaccess.write)
  dim sw as new streamwriter(fs)
  sw.basestream.seek(0, seekorigin.end)
  sw.writeline("service stopped: " + cstr(now()))
  sw.close()
end sub

這些例程都是打開一個(gè)log.txt的文件,寫入一個(gè)帶有時(shí)間戳的簡(jiǎn)單信息。streamwriter類提供了我們一個(gè)有效的方法來創(chuàng)建一個(gè)字符流,而filestream類則允許將streamwriter類和一個(gè)物理文件聯(lián)系起來。關(guān)閉streamwriter同時(shí)也關(guān)閉了他所連接的文件。

public sub timer1_tick(byval sender as object, _
  byval e as system.eventargs) handles timer1.tick
  dim logrecord as string = cstr(now())+ "  "
  dim fs as new filestream("c:/log.txt", _
      filemode.openorcreate, fileaccess.write)
  dim sw as new streamwriter(fs)
  logrecord += performancecounter1.nextvalue.tostring
  sw.basestream.seek(0, seekorigin.end)
  sw.writeline(logrecord)
  sw.close()
end sub

如你所見,代碼用當(dāng)前的時(shí)間初始化了一個(gè)字符串,并將它和從performancecounter讀出的值(它返回了當(dāng)前在我機(jī)器上運(yùn)行的進(jìn)程數(shù)量)連接起來。然后將這個(gè)字符串寫入log文件的最后。

將這個(gè)工程轉(zhuǎn)變?yōu)榉?wù)的話,需要比簡(jiǎn)單的編譯它多做一些。首先,你需要增加一些安裝代碼,這樣程序在作為服務(wù)被安裝后就能正常工作了。很幸運(yùn),可視化的設(shè)計(jì)器提供了菜單選項(xiàng)("add installer"),它可以自動(dòng)的生成這段代碼。然后,在你編譯了這個(gè)工程后,你需要在命令行狀態(tài)下運(yùn)行installutil.exe(這是.net sdk的工具之一)處理已編譯的工程,這樣就將服務(wù)安裝到了你的系統(tǒng)上并建立必須的注冊(cè)表項(xiàng)目。

一旦安裝了服務(wù),我們需要啟動(dòng)它-通過服務(wù)管理工具這一點(diǎn)都不難。不同的系統(tǒng),訪問這個(gè)工具的方法也不同。在windows 2000 professional中,你可以在控制面板中的管理工具得到。在圖3(http://msdn.microsoft.com/library/en-us/dnvbdev01/html/rob0301fig3.jpg)中,你可以看到服務(wù)已經(jīng)被手動(dòng)啟動(dòng)了。你也可以看到它被配置為自動(dòng)啟動(dòng),這就意味著下次我啟動(dòng)我的系統(tǒng),服務(wù)就開始運(yùn)行,甚至在我還沒有登錄系統(tǒng)之前。

圖4(http://msdn.microsoft.com/library/en-us/dnvbdev01/html/rob0301fig4.jpg)顯示了在我的系統(tǒng)上,這個(gè)服務(wù)生成的部分log。在這期間,我建立了一些進(jìn)程,退出登錄,再次登錄,重啟機(jī)器(這也導(dǎo)致了服務(wù)的重新啟動(dòng))。

.net工程類型

我著重介紹了兩類特定的vb.net工程。對(duì)于vb開發(fā)人員可以實(shí)現(xiàn)的工程類型都列在了表1中(無論如何,在beta1中)還有一些和獨(dú)立于語言的工程類型,如:安裝,配置工程,數(shù)據(jù)庫(kù)工程,以及分析工程。


工程類型 描述

windows application 通過windows 基于窗體的用戶界面生成應(yīng)用程序。
class library 為其他應(yīng)用程序中生成class libraries。
windows control library 在基于windows的控件。
web application 用靜態(tài)或動(dòng)態(tài)web頁面作為用戶界面生成應(yīng)用程序。
web service 從其它應(yīng)用程序中生成 web services 。
web control library 生成在web 應(yīng)用程序中的控件。
console application 用于生成命令行應(yīng)用程序。
windows service 為windows生成服務(wù)。

展示控制臺(tái)與服務(wù)應(yīng)用程序的原因之一是要強(qiáng)調(diào)一點(diǎn):vb.net 并不強(qiáng)制我們都要變成n層 人員。 事實(shí)上,microsoft大量投資以提供對(duì)傳統(tǒng)桌面應(yīng)用程序的支持。雖然.net意味著要學(xué)習(xí)大量的新東西,你可以把vb.net看作是 一場(chǎng)雄心勃勃的大變革—它會(huì)掃清vb的一些弊端,在提供向后兼容的前提下, 把它推向鼎盛。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 呼图壁县| 新丰县| 泊头市| 会昌县| 凤台县| 兴安县| 札达县| 大厂| 贺兰县| 水城县| 邻水| 同德县| 清原| 滕州市| 明星| 吉安市| 项城市| 曲松县| 金门县| 宁国市| 荥阳市| 黎川县| 小金县| 大同县| 涞水县| 孟连| 滦平县| 登封市| 玉田县| 澄城县| 北流市| 芜湖市| 中宁县| 五华县| 遵化市| 博野县| 合水县| 怀安县| 泾源县| 栾川县| 海盐县|