C#/VB.NET語法的比較 轉

最近由於工做的關係,須要從用了三年的C#轉用VB.NET啦。沒有辦法,原本嘛,使用語言是沒有很大的關係的。但剛剛使用的時候,多多少少仍是有一些磕磕碰碰的。主要是代碼編寫的操做便捷方面,總結幾點:

◎代碼編定實現Interface時
 
C#中使用 :Interface,而後按shift+alt+F10回車,呵呵,所有接口需實現的方法屬性所有自動生成。固然這個是2005纔有的。2003不知有沒有,反正我是沒有找着。何況2005也算是廣泛了。
VB中使用 Implements,光標定位至相應的Interface的上面,直接回車,呵呵,比C#還少一步就自動生成接口須要實現的方法及屬性了。數據庫

◎關鍵字對應關係: 
 編程

C#網絡

VB.NETide

using函數

Imports工具

thispost

Me動畫

voidthis

Sub編碼

base

MyBase

abstract

MustInherit

sealed

NotOverridable

virtual

MustOverride

switch

Select

internal

Friend

static  

Shared  

<T>

(Of T)

 

◎文檔註釋

都是基於XML語法,能夠描述代碼中每個類型和每個成員的信息,咱們知道書寫XML文檔註釋最大的好處就是能夠得到智能感知的支持,並結合特定的xlts生成漂亮的幫助文檔,C#中連續輸入///即會自動生成相對應的符合xml的註釋出來。這點VB好像不成,VB中連續輸和''',而後要手工寫出符出xml格式的註釋出來,一旦開始就不能斷開,也不能摻雜其餘代碼元素,直到全部的XML標記被關閉。<summary>是VB推薦使用的標記,是該描述元素的摘要。 除了<summary>,經常使用的標記有<remark>,表示說明;<param>表示參數信息;< exception>表示異常,此外還有<include>和<permission>等等。固然也不必定非要使用這些推薦的標記的,可是這些標記使用時能夠自動完成,並且能被IDE所利用,因此C#就能夠在///以後自動生成。關於這一點。本人比較鐘意C#多點。

◎My命名空間

"My"是一個極爲出色的設計,是一個工程相關的命名空間,其中的內容是由IDE幫助組織的。這個多是VB優於C#一個地方吧,至少到目前爲此我所知道的,C#是沒有這個命名空間。固然C#中的Properties是能夠實現VB中的My.Resources和My.Settings,至於My.User、My.Forms和My.WebServices就真的沒有了,要實現他們的功能,須要徹底手工編碼。 
My命名空間在當前版本中主要包含六個主要部分,分別是:My.Application、My.Computer、My.Resources、My.User、My.Forms和My.Webservices。直接輸入My關鍵字就可找到他們,也能夠導入My命名空間,其語法是: Imports 項目名稱.My 

因爲這是一項對於我來講是一項新的功能,查閱相關資料獲得: 
My.Application是與當前運行的應用程序有關的對象,許多功能和Application對象是同樣的,可是My.Application不只僅能用於Windows Form的應用程序,許多功能在控制檯應用程序照樣可以使用。列表說明以下:

My. Application成員

功能描述

ApplicationContext

應用程序的上下文,包括主線程和主窗體的信息

AssemblyInfo

程序集信息,包括版本、版權、標題、產品名稱和可執行名稱等

ChangeCurrentCulture

改變應用程序當前文化設置,如貨幣和時間的格式

ChangeCurrentUICulture

改變應用程序當前的用戶界面文化設置,如顯示語言和用詞

CommandLineArgs

一個只讀集合,返回當前應用程序的命令行參數。這些參數已經分隔開,無須像原來那樣手工分隔Command函數的值了

CurrentCulture

返回當前的文化設置

CurrentDirectory

返回應用程序使用的當前目錄

CurrentUICulture

返回當前的用戶界面文化設置

Deployment

返回按照ClickOnce方法部署的應用程序的Deployment對象

DoEvents

執行儲存在Windows消息隊列中的全部Windows消息

Exit

退出應用程序

GetEnvironmentVariable

經過環境變量的名字獲取環境變量的值

IsNetworkDeployed

返回一個值,指示當前應用程序是否採用了網絡部署方式

Log

一個記錄應用程序事件日誌和異常的日誌工具

MainForm

當前應用程序的主窗體

OpenForms

當前應用程序中全部已經打開窗體的集合,與VB6的Forms集合功能相同

Run

啓動Visual Basic的啓動/關閉應用程序模式

SplashScreen

返回當前應用程序做爲Splash Screen的窗口

My.Computer封裝了大量訪問系統和硬件信息的功能,操做起來比直接使用.NET Framework或Windows API都方便得多。包括不少對象,利用這些對象,之前要寫N多代碼的東東,如今可能一兩行代碼便可搞定。

My.Computer中的對象

功能描述

示例代碼

My.Computer.Audio

提供了播放音頻的功能,它既能夠從wav等文件播放,也能夠從音頻數據流來播放,就是說你能夠用它輕鬆播放儲存在資源文件中或者數據庫中的音頻。播放時還能夠指定後臺播放或等待結束等多種設置。結合My.Resources來使用,更顯得方便無窮。

簡單的播放wav文件

My.Computer.Clipboard

提供了以強類型方式讀寫剪貼板的功能,比Windows.Forms裏面的剪貼板更加好用。使用Clipboard對象能夠直接從剪貼板讀寫音頻、圖像、 文本甚至個人電腦中的文件拖放信息。此外,由VB6升級的項目如今將直接使用My.Computer.Clipboard對象升級之前的 Clipboard對象,這將解決VB.NET不能升級原先剪貼板功能的缺陷。

將文本框內的內容複製到剪貼板

My.Computer.Clock

獲取時間的工具,它能夠直接獲取當地時間、中時區的時間和從當時子時開始的毫秒計數。

My.Computer.FileSystem

充分改善文件操做的複雜程度。FileSystem對象提供了易於理解的操做方式。FileSystem對象中複製文件的方法不但只須要指定目標路徑,還 能夠幫助你創建目標目錄中不存在的級別。它還特別提供了CopyDirectory的功能,能夠複製整個目錄!這正是目前.NET Framework缺少的功能。同時FileSystem還能提供搜索上級目、子目錄或根目錄的功能,很是體貼。

 

在動畫演示下將文件放入回收站

 

只用一行代碼就能夠讀取文本文件內容


固然經過System.IO.FileSystem類也能夠完成FileSystem對象的大多數功能,這種方式就相似於C#或者說更適合於C#了。

My.Computer.Info

得到本機物理內存或虛擬內存的總數,剩餘量、操做系統名稱、當前用戶名、本機安裝的文化設置等等,均可以輕鬆使用Info對象,它讓你對應用程序所在的系統瞭如指掌。

My.Computer.Keyboard

和My.Computer.Mouse

快速得到用戶鍵盤的信息,如大寫鎖定、數字鍵盤鎖定等是否打開,以及鼠標有幾個按鍵,是否配備滾輪等。若是你但願你的應用程序可以作到最體貼用戶,那這些信息是少不了了

 

獲取用戶的鼠標左右鍵功能是否交換



My.Computer.Network

最經常使用的網絡任務,只須要一行代碼,就能夠Ping一個地址,或者檢測網絡是否接通。

 

下載文件的示例

 

My.Computer.Port

提供了用一行代碼打開本機串口的功能,還能馬上綁定一個事件監視串口的變化。如今串口編程出奇的簡單,不再須要MSComm控件了。

My.Computer.Printers

可以遍歷本機所安裝的全部打印機,還能找出默認的打印機。經過向默認打印機畫圖同樣的操做,就能開始打印了。這樣的操做會讓你想起VB6時代便利而簡潔的 打印操做。下面的例子將在默認打印機上打印一個橢圓。從VB6升級項目時,原來的Printer對象將自動升級爲 My.Computer.Printers中的相關操做,升級的用戶能夠更加放心了。

 

默認打印機上打印一個橢圓

 

My.Computer.Registry

比Microsoft.Win32空間中的那個版本簡單多了,他提供強類型的路徑支持,還能很是方便地讀寫註冊表。

如何判斷某一鍵值是否存在

My.Computer.Screen

獲取屏幕的可視範圍,像素的位數等。比VB6的Screen對象更強的是,它如今支持兩個顯示器。

My.Resources不是一個類庫,而是My命名空間中惟一一個子命名空間。是對項目資源的強類型封裝,從而使的資源的使用變得很是簡單。

My.User是My命名空間中最小的成員,和Thread.CurrentPrincipal屬性有關。簡單地將用戶名和角色信息提供,若是要得到當前登陸的用戶名,只須要輸入My.User.Identity就好了。

My.Forms感受就是給VB6.0的用戶找回一個之前的窗體編程模式, 由於My.Forms雖然在My命名空間中,可是使用它並不須要輸入My.Forms。並且My.Forms爲項目中每個窗體維護了一個默認實例,其實現方法很像Singleton模式——每一個窗體都有一個默認實例,並且有一個全局訪問點,就經過窗體的類名便可訪問到。假設有兩個窗體——Form1和Form2,Form1是啓動窗體,如今你要用代碼顯示Form2,只需Form2.Show便可。要在Form2中修改Form1中一個TextBox的文字,只須要這樣:Form1.textBox1.Text = "Hello"便可。My.Forms的功能是解決窗體互訪的最佳模式,同時也不會浪費內存,由於它只有在第一次訪問所需窗體的時候才創建它。

My.WebServices原理同My.Forms同樣。WebService對於項目全局應該有一個一致的訪問點,因此VB2005將代替你建立代理類的實例,並維護於My.WebServices中,你能夠隨時訪問他。

擴展My命名空間的功能

直接把類或模塊放入My命名空間是個方便的方法,作法很是簡單,只要將類或模塊定義在My命名空間中便可,例如:

最簡單的方法

而後就能夠直接用My.Tools來訪問自定義的模塊,這種是將函數作成靜態的,但全部的方法都作成靜態畢竟不是最佳方法,因此資料推薦的作法是:首先咱們要定義自定義類,能夠放在任何地方,而沒必要放到My命名空間中,這樣就能夠避免類名直接顯示在My關鍵字後。而後,在My命名空間下,定義一個帶有HideModuleNameAttribute的模塊,名稱能夠隨便起;最後在模塊中設定訪問自定義類實例的屬性。

利用Partial關鍵字能夠擴展My.Application或My.Computer的功能的。其對應的Class分別爲MyApplication和MyComputer。

在C#中使用My.Application要使用My.Application,必需要繼承System.Windows.Forms.WindowsFormsApplicationBase (該類位於Microsoft.VisualBasic.dll中)。繼承以後咱們要作幾件事情,首先書寫構造函數初始化MyApplication類, 在Visual Basic中這些設置均爲IDE生成,而C#則須要手工書寫。而後重寫OnCreateMainForm方法,這個方法設定了當前應用程序的主窗體。接下 來書寫My類,讓他提供對MyApplication類的全局訪問點。最後改寫Main,在其中執行My.Application.Run()代替原來的 Application.Run(),具體作法以下。

 

C#使用My.Appliation

修改Main函數

 

[STAThread]
static void Main()
{
    // Application.EnableVisualStyles();
    // Application.EnableRTLMirroring();
    // Application.Run(new Form1());
    Properties.My.Application.Run();


 


最後,再將本身對於事件機制的一小段代碼貼在這裏,算是本身的筆記吧,另開一個隨筆又有閑太過於勉強,看這篇反正是講VB VS C#的,想放在這裏也未嘗不可:

 

VB事件機制

 

C#事件機制
相關文章
相關標籤/搜索