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


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

◎代碼編定實現Interface時
 
C#中使用 :Interface,然后按shift+alt+F10回車,呵呵,全部接口需實現的方法屬性全部自動生成。當然這個是2005才有的。2003不知有沒有,反正我是沒有找着。況且2005也算是普遍了。
VB中使用 Implements,光標定位至相應的Interface的上面,直接回車,呵呵,比C#還少一步就自動生成接口需要實現的方法及屬性了。

◎關鍵字對應關系: 
 

C#

VB.NET

using

Imports

this

Me

void

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#事件機制

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM