- Visual C#.NET程序設計
- 黃昆主編
- 2523字
- 2018-12-27 11:29:17
第二部分 認識C#與面向對象編程
第3章C#語法與面向對象編程
C#(讀做“C sharp”)是一種編程語言,它是為在.NET Framework上運行的各種應用程序而設計的。C#簡單、功能強大、類型安全,而且是面向對象的。C#憑借在許多方面的創新,在保持C語言風格的同時,可以實現.NET環境下應用程序的快速開發。
Visual C#是Microsoft對C#語言的實現。Visual Studio通過功能齊全的代碼編輯器、編譯器、項目模板、設計器、代碼向導、功能強大而易用的調試器,以及其他工具,實現了對Visual C#的支持。通過.NET Framework類庫,可以訪問許多操作系統服務和其他精心設計的有用類,這些類可顯著縮短開發周期。
3.1 C#語言概述
Microsoft公司是這樣描述C#的:“C#是從C和C++派生出來的一種簡單、現代、面向對象的類型安全的編程語言。C#主要是從C\C++編程語言家族移植過來的,C和C++的程序員會馬上熟悉它。C#試圖結合Visual Basic快速開發的能力和C++強大靈活的能力。”
它具有現代的面向對象的特點,這使得程序員能在新的微軟.NET平臺上快速開發出種類豐富的應用程序。由于它是從C和C++中派生出來的,因此具有C++的功能。同時,由于是Microsoft公司的產品,它又同VB一樣簡單。對于Web開發而言,C#像Java,同時具有Delphi的一些優點。Microsoft宣稱,C#是開發.NET框架應用程序的最好語言。作為一種面向對象的語言,C#支持封裝、繼承和多態性的概念。所有的變量和方法,包括main方法(應用程序的入口點),都封裝在類定義中。類可能直接從一個父類繼承,但它可以實現任意數量的接口。重寫父類中的虛方法的各種方法要求用override關鍵字作為一種避免意外重定義的方式。
除了這些基本的面向對象的原理之外,C# 還通過幾種創新的語言結構簡化了軟件組件的開發,這些結構包括:
● 封裝的方法簽名(稱為“委托”),它實現了類型安全的事件通知;
● 屬性(Property),充當私有成員變量的訪問器;
● 特征(Attribute),提供關于運行時類型的聲明性元數據;
● 語言集成查詢(LINQ),提供了跨各種數據源的內置查詢功能。
3.1.1 C#語言的主要應用
正是由于C#提供了優秀的面向對象的程序設計能力,程序設計員才可以快速地編寫基于Microsoft.NET平臺的應用程序。在Microsoft.NET平臺下,利用C#語言通常可以用于開發以下多類應用程序:
● Windows應用程序;
● WPF應用程序;
● 控制臺應用程序;
● WPF用戶控件庫;
● 類庫;
● WPF瀏覽器應用程序;
● Windows服務;
● WPF自定義控件庫;
● Windows窗體控制庫。
在本書中涉及的應用包括控制臺應用程序和Windows應用程序,我們將在后面的章節中對它們做詳細的介紹。
3.1.2 C#語言的優點
C#語言具有以下的一些突出優點。
1. 簡潔的語法
C#的大括號語法使任何熟悉C、C++或Java的人都可以立即上手。了解上述任何一種語言的開發人員通常都能在很短的時間內就可以開始使用C#高效地進行工作。C#語法簡化了C++的諸多復雜性,并提供了很多強大的功能,同時,C#支持泛型方法和類型,從而提供了更出色的類型安全和性能。
2. 巧妙的面向對象設計
在C#的類型系統中,每種類型都可以看做一個對象,C#提供了一個叫做裝箱(boxing)與拆箱(unboxing)的機制來完成這種操作,而不會給使用者帶來麻煩。C#只允許單繼承,即一個類不會有多個基類,從而避免了類型定義的混亂。
3. 與Web的緊密結合
因為有了Web服務框架的作用,對程序員來說,網絡服務看起來就像C#的本地對象。程序員能夠利用它們已有的面向對象的知識和技巧開發Web服務。僅需要使用簡單的C#語言結構,C#組件就能夠方便地為Web服務,并允許它們通過Internet被運行于任何操作系統上的任何語言所調用。
4. 完備的安全性與錯誤處理能力
在C#中,變量是類型安全的。C#中不能使用未被初始化的變量,對象的成員變量由編譯器負責將其置零,當局部變量未經初始化而被使用時,編譯器將做出提醒。C#不支持不安全的指向,不能夠將整數指向引用類型,如對象。當進行下行指向時,C#將自動驗證指向的有效性。C#中提供了邊界檢查與溢出檢查功能。
5. 靈活性與兼容性
在簡化語法的同時,C#并沒有失去靈活性。雖然它不能用來開發硬件驅動程序,且在默認的狀態下沒有指針等,但是,它仍然不失靈活性。C#不支持類的多繼承,但是通過對接口的繼承,實際上可以獲得這一功能,這體現了它的靈活性。
3.1.3 C# 3.0的新特性
在發布Visual Studio 2008后,微軟公司又及時地展示了人們所期望的C#的下一代版本:C# 3.0。盡管C# 3.0并沒有標準化,但微軟還是為Visual Studio 2008引入了C#的新特性,使其語言更加簡潔與豐富。其新特性包括以下幾個方面。
1. 隱式類型本地變量
C# 3.0引進了一個新的關鍵字叫做Var。Var這個關鍵字用于在變量最先聲明時,從用來初始化變量的表達式中推斷出變量的類型。
2. 擴展方法
擴展方法使用戶能夠使用額外的靜態方法來擴展各種類型。不過它們是非常有限的,也只能在實例方法不足的情況下作為候補使用。擴展方法只能在靜態類中被聲明,并且以關鍵字this放在方法的第一個參數前來標識。
3. Lambda表達式
Lambda表達式顯得更加簡潔,它也可以用來產生匿名方法,但要求必須清楚地陳述每個類型的狀態。
4. 表達式樹
C# 3.0包含了一個新類型,允許表達式當做運行時的數據使用。這個類型,System. Expressions.Expression<T>,只是內存中一個Lambda表達式的重新表達,這樣可以使代碼在運行時也能修改和檢查Lambda表達式。
5. 對象初始化器
C# 3.0允許new操作與匿名的對象初始化器創建一個匿名類型的對象。C# 3.0提出了對象初始化器(Object Initializers)的概念,可以指定一個或多個對象的域或屬性的值。由此可見,兩種初始化對象的方式完全一樣。匿名對象初始化器聲明一個匿名類型,并返回這個類型的實例。
3.1.4 C#程序的編譯與執行
.NET語言的編譯分為兩個階段,編譯源文件為中間語言(IL)和CLR加載程序集。
1. 編譯源文件為中間語言
IL(Intermediate Language)稱為中間語言。首先所有的.NET源代碼都將被編譯成IL,與高級語言相比,IL更像是機器語言。然而,IL卻包含一些抽象概念(如類、異常),這也是這種語言被稱為中間語言的原因。IL被打包在DLL或EXE文件中,并存儲在項目文件夾中。
2. CLR加載程序集
進一步將IL編譯成匯編語言的工作(也就是第二階段)需要在運行時進行,這個過程由即時編譯器(JIT)完成。
執行C#程序時,程序集將加載到CLR中,這可能會根據清單中的信息執行不同的操作。如果符合安全要求,CLR就會執行實時編譯(JIT)以將IL代碼轉換為本機機器指令。CLR還提供與自動垃圾回收、異常處理和資源管理有關的其他服務。由CLR執行的代碼有時稱為“托管代碼”,它與編譯為面向特定系統的本機機器語言的“非托管代碼”相對應。
也就是說,當編譯器生成一個EXE文件后,該程序的入口函數為main() 方法。裝載器將這個EXE文件載入,探測到這是一個托管EXE,于是又載入.NET運行時庫文件,接著調用了EXE的main()方法,這將觸發對main()方法的即時編譯。main()方法在內存中被替換為本地機器語言,于是.NET應用程序開始運行。當程序中止時,本地代碼從內存中釋放,所以在下次運行時,IL需要被即時編譯器重新編譯。
注意:在程序設計中進行編譯時,初學者有時會遇到這樣的問題,即無論在項目中做了何種修改,編譯時仍按以前的結果運行。這時需要在項目文件夾中的bin子文件夾中選擇debug子文件夾,將其內與項目同名的exe文件刪掉重新編譯才行,請讀者務必注意。
- Fundamentals of Linux
- Learning Chef
- vSphere High Performance Cookbook
- Flink SQL與DataStream入門、進階與實戰
- Mastering Concurrency in Go
- Selenium Design Patterns and Best Practices
- Django Design Patterns and Best Practices
- JavaScript前端開發與實例教程(微課視頻版)
- React.js Essentials
- Modern JavaScript Applications
- Mastering JBoss Enterprise Application Platform 7
- 飛槳PaddlePaddle深度學習實戰
- Learning JavaScript Data Structures and Algorithms
- Python數據可視化之matplotlib實踐
- Mastering Python