C深入淺出全接觸_第1頁
C深入淺出全接觸_第2頁
C深入淺出全接觸_第3頁
C深入淺出全接觸_第4頁
C深入淺出全接觸_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 C#,深入淺出全接觸一、什么是 C#?C# 是由Microsoft開發(fā)的一種新型編程語言,由于它是從C和C+ 中派生出來的,因此具有C+的功能。同時,由于是Microsoft公司的產品,它又同 VB一樣簡單。對于web開發(fā)而言,C#象 Java,同時具有Delphi的一些優(yōu)點。Microsoft宣稱:C#是開發(fā).NET框架應用程序的最好語言。 二、Java與 C# 要學習C#,不能不首先看一看Java語言。 相對于其他編程語音,Java有一個無庸置疑的優(yōu)點:用戶以及編譯器第一次不必了解生成可執(zhí)行代碼的特定CPU細節(jié)。Java引入了一個編譯代碼中間層,叫做字節(jié)代碼,并使用一個虛擬抽象的機器,而

2、不是一個真實的機器。當Java編譯器結束了一個源文件的編譯后,你所得到的不是可以立即在一個給定平臺上運行的代碼,而是可以在任何真實的平臺上運行的字節(jié)代碼,唯一的條件就是這個平臺要理解和支持Java。這些發(fā)展包含著一個文化的變革。作為一個開發(fā)人員,你只需要確定Java虛擬機(JVM)提供的抽象層,不同的OS銷售商負責執(zhí)行代碼層,從而將中立于平臺的字節(jié)代碼映射到主機平臺的機構中。在這種情況下,Java似乎是統一分布式計算機世界的領袖候選人了。“編寫一次,永遠運行”(并且無論在哪里)一度成為Java誘人但卻真實的口號。 那么為什么說Java只是“似乎”是一個好東西呢?跨平臺理論的發(fā)展很好地證明了這一

3、點。我們看到,將Java代碼從一個平臺移植到另一個平臺Java這個語言最重要和最受吹捧的特點并不象宣傳的那樣容易。任何Java平臺都有其自己的虛擬機,它可以理解通用的字節(jié)代碼,并且及時地將其編譯為本地代碼。矛盾由此產生,不同虛擬機的執(zhí)行也很不相同,這一點足以使代碼的移植比預期耗費多得多的時間,而且基本上不是自動的。 那么,Java模型的好處在哪里呢?首先,Java是一種先進的、面向對象的語言,包含了預防常見錯誤的內置功能,并在僅僅一兩個對象中攜帶了許多經常需要用到的功能。與C+相比,Java更易于讀寫,不容易出錯,而且更加美觀,但是它速度較慢也不太靈活。想實現在任何軟件和硬件平臺上都可虛擬移植

4、,Java盡可能少地使用了公分母模型,也就是說放棄了將每個平臺開發(fā)到極限的能力。第二,虛擬機的概念本身就是可移植和可共用的,因此對于分布式環(huán)境來說是理想的。Java對于為非Windows平臺開發(fā)代碼是最好的語言。 那么對于Windows平臺來說,Java又怎么樣呢?讓Java適應Windows是不可能的,這是由于Sun的許可約束問題。但是Java實在是太吸引人了,Microsoft比誰都能更清楚這一點。因此,Microsoft又一次采取了“拿來主義”的手法,很好地利用了Java 的眾多特性,隆重推出了Windows平臺的新銳力量,它就是相當簡單但十分強大的面向對象的C#編程語言。C#超過了C+

5、,它天生就包含了.NET框架類庫中的所有類,并使語法簡單化。 可以說,Java具備的優(yōu)點,C#都可以或者都將具備! 三、C#的主要特征 C# 是.NET的關鍵性語言,它是整個.NET平臺的基礎。與C#相比,.NET所支持的其它語言顯然是配角身份。比如,VB.NET的存在主要是對千萬個VB開發(fā)人員的負責。對于JScript.NET和 Managed C+ 也同樣可以這么說,后者只是增加了調用.NET類的C+ 語言。C#是唯一沒有在設計思路中加入了前輩語言某種遺傳的新事物。 .NET平臺將 C#作為其固有語言,重溫了許多Java的技術規(guī)則。C#中也有一個虛擬機,叫做公用語言運行環(huán)境(CLR),它的

6、對象也具有同樣的層次。但是 C#的設計意圖是要使用全部的Win32 API甚至更多。由于C#與 Windows的體系結構相似,因此 C# 很容易被開發(fā)人員所熟悉。 Java的目的是要拯救分布式計算世界,C# 則不同。C#本質上是C+的進化產物,使用了包括聲明、表達式及操作符在內的許多C+特征,但是 C#還有更多的增強功能,比如類型安全(type-Safe)、事件處理、碎片帳集、代碼安全性等。在C#中,除了可以使用許多API,更能使用.NET類。特別地是,我們可以處理COM的自動化和C類型的函數。 C#還讓你調用無管理的代碼,也就是在CLR引擎控制之外的代碼。這種不安全的模式允許你操作原始指針來

7、讀和寫內置碎片帳集控制以外的內存。 四、安裝運行環(huán)境 安裝.NET SDK 是在機器上運行C# 的第一步。.NET SDK 可以安裝在Windows ME、Windows NT或Windows 2000上,但是最好的選擇是Windows 2000上。選擇了操作系統后,再執(zhí)行以下步驟: 安裝 IE 5.5 安裝Microsoft .NET Framework SDK。它是免費的,可以從以下站點下載.NET Framework SDK. 完成以上安裝后,就可以在任何文本編輯器中編寫代碼了,最后保存為擴展名為.cs的文五、C# 編輯器 編寫C#程序可以在文本編輯器中進行,或者在集成開發(fā)環(huán)境Visua

8、l Studio中進行。市場上還有一些第三方編輯器,其中一些是免費的。更多信息請查看這里。 六、C#的程序結構 一個C#程序包含一個類,這個類中至少有一個公用的靜態(tài)方法Main,這個方法對程序進行初始化并終止程序。在Main方法中創(chuàng)建子對象、執(zhí)行方法并實現軟件的邏輯處理。下面是一個典型的微型C#例程: using System; class MyFirstApp static int Main(String args) return 1; 在C#中,要使用下面的聲明來引入外部定義,而不是用象C+中的#include: using System; using System.Data; 然后,使用

9、C#編譯器csc.exe編譯代碼。假定將前面的代碼保存為文件hello.cs,使用以下命令: csc hello.cs 結果就生成了hello.exe,它向控制臺輸出窗口寫入信息 "Hello .NET"。 盡管編譯后的結果文件包含.exe后綴,但hello.exe卻不是一個真正的、明確的CPU代碼段。實際上,它包含了.NET字節(jié)代碼。當啟動hello.exe時,CLR 將提取編譯器寫入代碼中的重要元數據。接著,一個叫做 Just-In-Time 編譯器的模塊將代碼映射到特定的 CPU中,開始實際的執(zhí)行過程。 七、C# 和名稱空間 實際中的 C#程序通常包含多個文件,其中每

10、個文件都可以包含一個或多個名稱空間。一個名稱空間就是一個名字,它向編譯器描繪出一些軟件實體,如類、界面、枚舉以及嵌入的名稱空間。名稱空間和數據類型一樣必須有唯一的名稱。在一個C#程序中,可以通過一個元素的完整資格名稱來識別它,這個資格名稱表明出層次關系。例如,System.String是 .NET String類型完整的資格名稱。但是為了簡化代碼起見,只要聲明正在使用System名稱空間: using System; 就可以使用一個相對名稱如String來作為完整名稱的同義詞,而最后依然代表 System.String。 通過使用namesapce關鍵字,我們還可以將C#程序或者類包裹在自身的

11、名稱空間中,比如: namespace MyOwn using System; / for String class MyFirstApp static int Main(String args) return 1; 名稱空間 MyOwn 是全局名稱空間的一部分。調用它不需要再使用前綴,因為其完整資格名稱就是簡單的MyOwn。定義一個名稱空間是保持公共名稱唯一性的一個途徑。實際上,如果兩個類的名稱發(fā)生沖突,但只要它們分別屬于不同的名稱空間,兩個類仍然是各自唯一的。 八、C#中一個經典例程的編寫與編譯 1、編寫代碼 “Hello World”幾乎是學習任何一門編程語言都要涉及的第一個例程。下面也

12、讓我們用C#完成這個工作。在上面提到的任意一個C#編輯器中(比如寫字板),鍵入以下代碼: using System;class MyClass static void Main() Console.WriteLine("Hello World!"); 然后保存為文件myclass.cs。 2、編譯程序 csc myclass.cs 于是,C# 編譯器在工程文件的bin 目錄下生成了一個myclass.exe文件。運行這個 exe,看輸出是什么。 3、代碼含義 下面我們逐行看看這些代碼的含義: 程序的第一行是using System。為什么要using System呢?因為S

13、ystem是存儲系統類的名稱空間,程序中用來在控制臺上顯示輸出的Console(控制臺)類就是在System 名稱空間中定義的。 下一行是class MyClass。C# 中的class關鍵字用于創(chuàng)建一個新類。 每個類都有一個靜態(tài)的void Main() 函數,這個函數就是一個 C# 程序的入口。 Console 類的WriteLine方法負責向控制臺輸出文本信息。九、C#編程實戰(zhàn)演習ABC 1、用Visual Studio .NET編寫C#程序 Visual Studio.NET 是Microsoft新一代的旗艦開發(fā)環(huán)境,在這個環(huán)境中,我們能夠看到Microsoft將所有開發(fā)工具都集成到一個

14、IDE中。我們驚喜地發(fā)現,我們擁有了一個所有編程語言都適用的代碼編輯器。而且,這個環(huán)境中還具一個HTML 編輯器、一個XML編輯器、一個SQL Server界面以及一個Server Explorer。 下面,我們將學習如何在 Visual Studio .NET中編寫C#程序。 初始頁面 啟動VS.NET后,我們會看到與以前版本完全不同的景象。實際上,它看起來更象Visual J+。一開始出現的是初始頁面,這是一個HTML格式的頁面,從中我們能看到在線Microsoft web 站點的鏈接、現有解決方案列表以及創(chuàng)建屬于自己的個性文件(Profile)的功能。 創(chuàng)建C# 控制臺應用程序 在Vis

15、ual Studio.Net中創(chuàng)建 C# 應用程序是簡單得不能再簡單的事情。點擊 "Create New Project"(創(chuàng)建新工程)鏈接后,會出現一對話窗口。從這個窗口中的多種工程樣本中選擇需要的一個,在這里,我們選擇Visual C# 工程文件。選中后,出現下面的對話框: 然后再選擇“Console Application”(控制臺應用程序),命名為 "Hello1" (不需要加引號),點擊“OK”,VS.NET開始生成應用程序的殼(shell)。 現在讓我們來分析一下這個殼中已經具備的代碼。 首先我們會看到關鍵字namespace(名稱空間)。你

16、可以將名稱空間簡單地理解為是將類歸在一起的東西。C# 中的名稱空間與C+中的名稱空間相似,但還具備一些額外的功能。另外,它也同Java中的package關鍵字相似。 下面的語句是using 命令,它負責告訴編譯器在System 庫中尋找未知的類。.NET 攜帶了一套可擴展的系統庫,由它們的名稱空間名確定其范圍。在C# 中,所有的I/O 操作都是系統庫的一部分,而不是語言本身的一部分。 接著我們看到"public class Class1"聲明。作為一個先進的面向對象的開發(fā)語言,C# 中的所有代碼都必須包含在一個類里面,不存在全局函數或數據。 程序中還包含一個方法Main,它

17、是所有C# 程序的進入大門。 修改一下代碼 現在我們要增加一些代碼來執(zhí)行一些有用的操作。第一件事是將右上角的窗口切換到Class View(類視圖),然后展開"Hello1" 名稱空間,點擊 "Class1" 類。在屬性窗口中將名稱修改為Hello。現在的代碼窗口變?yōu)椋?將光標移到Main方法內的TODO注釋之后,輸入“Console”這個命令。請注意發(fā)生了什么:你能看到系統自動列出了Console類的相關方法。選擇 WriteLine,然后寫入下面這一行: Console.WriteLine("Hello from VS.NET!"

18、); 運行 現在,從“Build”菜單中選擇“Build”項,然后從“Debug”(調試)菜單中選擇 "Start Without Debugging"(不調試啟動)。最后,控制臺應該顯示出 "Hello From VS.NET!"的信息。這說明,我們已經大功告成了2、用Visual C# 創(chuàng)建Windows應用程序 在Visual C#創(chuàng)建一個Windows (GUI) 應用程序要以前版本的VC+ 容易得多。下面將介紹用Visual C#工程文件向導創(chuàng)建Windows應用程序的過程。 創(chuàng)建應用程序框架 在VS .NET IDE中選擇“新建>工程文

19、件>Visual C# 工程文件>Windows 應用程序”:然后點擊 OK,出現一個表單設計視圖(這與VB或Delphi相同)。在右側我們看到了一個解決方案導航器( Solution Explorer)。向導為新表單增加了一個Form1.cs 文件,其中包括了這個表單及其所有子窗口的的代碼: 雙擊 Form1.cs就能看到這個代碼: namespace mcWinFormsApp using System; using System.Drawing; using System.Collections; using System.ComponentModel; using Syst

20、em.WinForms; using System.Data; / <summary> / Summary description for Form1. / </summary> / <summary> / Required designer variable. / </summary> public Form1() / / Required for Windows Form Designer support / InitializeComponent(); / / TODO: Add any constructor code after Ini

21、tializeComponent call / / <summary> / Clean up any resources being used. / </summary> public override void Dispose() base.Dispose(); components.Dispose(); / <summary> / Required method for Designer support - do not modify / the contents of this method with the code editor. / </s

22、ummary> private void InitializeComponent() /this.TrayHeight = 0; /this.TrayLargeIcon = false; /this.TrayAutoArrange = true; this.Text = "Form1" this.Click += new System.EventHandler (this.Form1_Click); protected void Form1_Click (object sender, System.EventArgs e) / <summary> / Th

23、e main entry point for the application. / </summary> public static void Main(string args) Application.Run(new Form1(); 添加控件 要向一個表單中添加控件或者子窗口,需要打開 工具箱ToolBox。這個工具箱的概念來自VB。點擊菜單“視圖>工具箱”,激活工具箱功能: ToolBox(工具箱)窗口的樣子如下圖所示。現在就可以添加控件了,添加方法與Visual Studio的以前版本一樣,拖放或者雙擊控件都可以。 首先在表單上托放下一個按鈕和一個編輯框,然后讓我們看

24、看系統向初始組件(InitializeComponent)中增加了什么東西。 接著在屬性窗口中設置控件的屬性,這與VB中的操作方式一樣。在控件上點擊右鍵,并點中“屬性”菜單條就可以調出屬性窗口。 現在看看InitializeComponent方法,就會發(fā)現這些代碼已經增加到其中了。接著手工修改一下這些代碼: /this.TrayHeight = 0; /this.TrayLargeIcon = false; /this.TrayAutoArrange = true; button1.TabIndex = 0; button1.Text = "Browse" button1.

25、Click += new System.EventHandler (this.button1_Click); textBox1.Text = "textBox1" textBox1.TabIndex = 1; this.Text = "Form1" this.Click += new System.EventHandler (this.Form1_Click); 添加事件處理器 最后,要為按鈕增加一個事件處理器,實現瀏覽文件的目的。在按鈕上雙擊,打開Button1_Click事件處理器。同理,使用同樣的方法可以為任何控件編寫事件處理器。 protecte

26、d void button1_Click (object sender, System.EventArgs e) OpenFileDialog fdlg = new OpenFileDialog(); fdlg.Title = "C# Corner Open File Dialog" ; fdlg.InitialDirectory = "c:" ; fdlg.Filter = "All files (*.*)|*.*|All files (*.*)|*.*" ; fdlg.FilterIndex = 2 ; fdlg.RestoreD

27、irectory = true ; if(fdlg.ShowDialog() = DialogResult.OK) textBox1.Text = fdlg.FileName ; 到此就完成了所有步驟,剩下的就是運行這個程序。它實現了瀏覽一個文件,然后將選擇的文件名裝進文本框的功能。請下載相關代碼:winFormApp.zip 。3、創(chuàng)建C# 類庫 (Dll) 以前在VC+中創(chuàng)建一個dll文件不能說簡單,但在Visual C# 中,這將同樣是輕而易舉的事情。下面的介紹分成兩部分:1、創(chuàng)建DLL,2、在客戶端測試dll。 (1)創(chuàng)建DLL 首先創(chuàng)建一個空的類庫工程。在VS.NET集成環(huán)境(IDE

28、)中選擇“文件>新建>工程文件>Visual C# 工程>類庫”,點擊Browse(瀏覽)按鈕選擇工程文件名和相應的目錄,再點擊 OK。 接著看看工程和它的相關文件。Solution Explorer(解決方案探測器)向工程中增加兩個C# 類,第一個是 AssemblyInfo.cs ,第二個是Class1.cs。我們不討論AssemblyInfo,重點介紹 Class1.cs。 雙擊Class1.cs,就能看到一個名稱空間mcMath。我們將在客戶機引用這個名稱空間以使用這個類庫: namespace mcMath using System; / <summar

29、y> / Summary description for Class1. / </summary> public class Class1 public Class1() / / TODO: Add Constructor Logic here / 現在就可以Build(構造)這個工程了。Build(構造)完畢后,就會在工程文件的bin/debug 目錄中生成mcMath.dll文件。 增加一個方法 從View (視圖)菜單中打開ClassView(類視圖),開始只顯示Class1,沒有方法和屬性。現在來增加一個方法和一個屬性。 用鼠標右鍵單擊“Class1”,選擇“Add(

30、增加)> Add Method(增加方法)”,這時將彈出C# 方法生成向導: 在這個窗口中增加方法名、存取類型、返回類型、參數以及注釋信息。使用Add(增加)和Remove(取消)按鈕可分別從參數列表中增加和取消參數。這里增加了一個方法long Add( long val1, long val2 ),它負責將兩個數字相加并返回和。 增加一個屬性 同理可以通過C#屬性生成向導,向類中增加一個屬性: 增加了一個方法和一個屬性后, Class1變成下圖所示的樣子: 仔細觀察這個 Class1,你會發(fā)現C#的向導程序向類中增加了如下兩個函數: public long Add (long val1, long val2) return 0; public bool Extra get return true; set 向類中增加代碼 這里把Class1修改成為 mcMathComp ,因為 Class1是個容易造成混淆的名字,當想將這個類用在一個客戶應用程序中時會造成問題。下面的代碼對上面的做了些調整: namespace mcMath using System; public class mcMathComp private bool bTest = fa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論