C#程序設計教程(第6版)課件全套 第1-12章 C#概述 -C#案例-FoxOA的人力資源培訓成績管理系統(tǒng)_第1頁
C#程序設計教程(第6版)課件全套 第1-12章 C#概述 -C#案例-FoxOA的人力資源培訓成績管理系統(tǒng)_第2頁
C#程序設計教程(第6版)課件全套 第1-12章 C#概述 -C#案例-FoxOA的人力資源培訓成績管理系統(tǒng)_第3頁
C#程序設計教程(第6版)課件全套 第1-12章 C#概述 -C#案例-FoxOA的人力資源培訓成績管理系統(tǒng)_第4頁
C#程序設計教程(第6版)課件全套 第1-12章 C#概述 -C#案例-FoxOA的人力資源培訓成績管理系統(tǒng)_第5頁
已閱讀5頁,還剩389頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第1章C#概述C#程序設計教程(第6版)01知識目標:使學生了解C#的由來、發(fā)展、特點及C#13.0的功能;熟悉MicroSoft.NET和VisualStudio的功能。03思政目標:以“科學技術是第一生產(chǎn)力”的論斷來激勵學生熱愛科學技術,為促進人類社會的不斷進步而努力學習。02能力目標:使學生能夠進行VisualStudio.NET的安裝,以及C#的安裝和啟動。本章學習目標1.1C#簡介PARTONE1.1.1C#的由來VisualC#(簡稱VC#或C#,本書統(tǒng)稱C#,如C#13.0)屬于美國微軟公司,其發(fā)展歷程可謂是波瀾壯闊。1995年,SUN公司正式推出面向對象的開發(fā)語言Java,憑借跨平臺、跨語言的功能特點,Java逐漸成為企業(yè)級應用系統(tǒng)開發(fā)的首選工具。Java

的出現(xiàn)使得越來越多的基于C/C++進行開發(fā)工作的開發(fā)人員轉向從事基于Java的應用開發(fā)工作。Java發(fā)展迅速,為軟件開發(fā)領域帶來了可觀的發(fā)展前景,微軟作為世界上最大的軟件公司很快推出了基于Java的編譯器VisualJ++。VisualJ++在極短時間內就由1.1版本升級到了6.0版本。VisualJ++6.0集成在VisualStudio6.0中,不但加快了Java虛擬機(JavaVirtualMachine,JVM)的運行速度,還新增了許多特性,同時支持調用WindowsAPI。這些特性使得VisualJ++成為強有力的Windows應用開發(fā)平臺,并成為業(yè)界公認的、優(yōu)秀的Java編譯器。VisualJ++雖然具有強大的開發(fā)功能,但是主要在Windows平臺的系統(tǒng)開發(fā)工作中使用。SUN公司認為VisualJ++違反了Java的許可協(xié)議,即Java開發(fā)平臺的中立性,因此,對微軟提出了訴訟,這使得微軟處于極為被動的局面。為改變這種局面,微軟決定另辟蹊徑,推出進軍互聯(lián)網(wǎng)的“.NET計劃”,以及實現(xiàn)該計劃的重要開發(fā)語言——VisualC#。1.1.1C#的由來“.NET計劃”是一項非常龐大的計劃,同時是微軟發(fā)展的戰(zhàn)略核心。VisualStudio.NET是微軟.NET技術的開發(fā)平臺,C#就集成在VisualStudio.NET中。.NET代表一個集合、一個環(huán)境、一個編程的基本結構,它以一個平臺的身份來支持下一代的互聯(lián)網(wǎng)。為了支持.NET平臺,VisualStudio.NET在VisualStudio6.0的基礎上進行了極大地調整。在VisualStudio.NET測試版中VisualJ++消失了,取而代之的是C#。微軟在2000年6月舉行的“職業(yè)開發(fā)人員技術大會”上正式發(fā)布了C#,其英文名為VisualC-Sharp。微軟對C#的定義是:“C#是一種類型安全、現(xiàn)代、簡單的,由C語言和C++衍生而來的面向對象的編程語言,它是牢牢根植于C語言和C++之上的,可立即被C語言和C++的開發(fā)人員所熟悉。C#的目標是綜合VisualBasic的高生產(chǎn)率和C++的高行動力?!蹦壳?,使用C#進行C/S(客戶機/服務器)模式編程、使用C#與ASP.NET進行B/S(瀏覽器/服務器)模式編程,以及在人工智能時代使用C#進行元宇宙的虛擬現(xiàn)實編程的開發(fā)人員越來越多。使用C#進行編程已成為程序設計的趨勢之一,C#已經(jīng)站在了主流編程語言的前列。作為微軟新一代面向對象的語言產(chǎn)品,C#具有現(xiàn)代、簡單、完全面向對象和類型安全等特點。如果讀者是基于C/C++進行開發(fā)工作的開發(fā)人員,那么學習C#將會變得非常容易。許多C#語句直接借用了開發(fā)人員所熟悉的語言,包括表達式和操作符。如果不仔細區(qū)分,那么很容易會把它當成C++。關于C#最重要的一點是,C#是現(xiàn)代編程語言,它在類、命名空間、方法重載和異常處理等領域中簡化了C++,摒棄了C++的復雜性,使其更易用、更少出錯。C#減少了C++的一些特性,不再有宏、模板和多重繼承,新增了嚴格的類型安全、版本控制、垃圾收集(garbagecollect)等功能。這些功能有助于開發(fā)面向組件的軟件。1.避免指針C#中避免了復雜的指針操作,禁止了直接內存操作,不可使用運算符“::”和“→”,整型數(shù)據(jù)0和1也不再是布爾值,“==”被用于比較操作,“=”被用于賦值操作,從而減少了運算符錯誤。C#使用的是統(tǒng)一的類型系統(tǒng),摒棄了C++中多變的類型系統(tǒng)。1.1.2C#的特點2.支持跨平臺由于網(wǎng)絡系統(tǒng)錯綜復雜,使用的硬件設備和軟件系統(tǒng)也各不相同,因此開發(fā)人員設計的應用程序必須具有強大的跨平臺性。而C#編寫的應用程序就具有強大的跨平臺性,這種跨平臺性體現(xiàn)在C#應用程序可以運行在不同類型的客戶端上,如PDA、手機等非PC端設備。3.避免多重繼承C#支持所有關鍵的面向對象的概念,如封裝、繼承和多態(tài)。完整的C#類模式構建在NGWS(NextGenerationWindowsServices,下一代的視窗服務)運行時的虛擬對象系統(tǒng)(VirtualObjectSystem,VOS)上層。對象模式只是基礎的一部分。在C#中,不存在全局函數(shù)、變量或是常量,所有的東西都封裝在類中,包括事例成員(對象可以訪問)或靜態(tài)成員。封裝使C#代碼更加易讀且減少了潛在的命名沖突。定義類中的方法默認是非虛擬的,不能被派生類改寫。其主要特點是消除由于偶然改寫方法而導致的部分原碼出錯。要改寫方法,必須具有顯式的虛擬標志。這種做法不但縮減了虛擬函數(shù)表,而且確保了原碼正確版本的控制。在使用C++編寫類時,可以通過訪問權限為類成員設置不同的訪問等級。C#同樣支持private、protected和public三種訪問權限,不僅如此,還增加了第四種訪問權限——internal。在大多數(shù)情況下,僅需從一個類中派生。這就是C#僅允許一個基類的原因。如果開發(fā)人員需要使用多重繼承,那么可以使用接口實現(xiàn)。1.1.2C#的特點4.快速應用開發(fā)功能快速應用開發(fā)是目前的開發(fā)語言中最為重要的功能之一,也正是C/C++的弱點。在網(wǎng)絡時代,應用系統(tǒng)的開發(fā)必須按照網(wǎng)絡時代的速度進行,RAD功能可以使開發(fā)人員的開發(fā)效率倍增,從而使他們從繁重的重復性工作中解放出來。C#的RAD功能在垃圾收集、委托等特性方面表現(xiàn)優(yōu)異。垃圾收集機制減輕了開發(fā)人員管理內存的負擔,委托功能更是讓開發(fā)人員可以不經(jīng)過內部類就調用函數(shù)。利用C#的這些特性,可以使開發(fā)人員通過較少的代碼開發(fā)出更強大的應用程序,并且可以更好地避免部分錯誤的發(fā)生,從而縮短了應用系統(tǒng)的開發(fā)周期。許多使用C++難以實現(xiàn)的功能,只不過是C#的基礎。5.語言的兼容和協(xié)作交互性使用C#編寫的程序可以最大限度地實現(xiàn)與任何.NET語言互相交換信息,為開發(fā)人員節(jié)省了大量時間。C#與其他.NET語言可以交互協(xié)作,.NET使各種編程語言可以真正地互相交流,開發(fā)人員不必再將一種語言強行改寫為另一種語言。在全球從事軟件編程工作的人中,大約有50%的人以VisualBasic為基本的編程工具,在跨入.NET編程時代后,這些人可以輕松地使用VisualBasic.NET開發(fā)Web應用程序,C#可與之很好地兼容、協(xié)作交互。6.與XML的天然融合由于XML技術真正融入了.NET和C#,因此C#編程成了真正意義上的網(wǎng)絡編程,甚至可以說.NET和C#是專為XML技術而設計的。使用C#的開發(fā)人員可以借助C#內含的類應用XML技術。與其他編程語言相比,C#為開發(fā)人員提供了更大的自由度和更強的性能,使其可以更好地使用XML技術進行開發(fā)。1.1.2C#的特點7.繼承C++C#集成并保留了C++的強大功能,如類型安全檢測和重載功能,而且提供了一些新功能來取代原來C++中預處理程序的部分功能,提高了語言的類型安全性。下面以指針為例來介紹類型安全。在C++中使用指針時,開發(fā)人員可以自由地將它強制轉換為任何類型,包括可以將int*(整型指針)強制轉換為double*(雙精度型指針)。只要內存支持這種操作,它就可以被執(zhí)行,但這并不是開發(fā)人員所想象的企業(yè)級編程語言的類型安全。C#具有最嚴格的類型安全,可以很好地保護自身安全和垃圾收集器的安全。但開發(fā)人員必須遵守C#中的一些相關變量的規(guī)則。C#取消了不安全的類型轉換,不再允許將整型強制轉換為引用型(如對象),但當轉換是向下進行時,C#可以驗證這種轉換是正確的。8.版本可控在過去的幾年間,幾乎所有開發(fā)人員都避免涉及DLL,這是因為多個應用程序都安裝了名字相同的不同版本的DLL,但老版本的應用程序可以很好地和新版本的DLL一起工作的概率很低,更多的時候它們會中斷運行。NGWS運行時將對開發(fā)人員所寫的應用程序提供版本支持,C#可以更好地支持版本控制。C#盡管不能確保正確的版本控制,但是可以為開發(fā)人員保證版本控制會成為可能。有了這種支持,開發(fā)人員就可以確保當他的類庫升級時,仍保留對已存在的客戶應用程序的二進制兼容。綜上所述,可以認為C#是派生于C語言和C++的一種編程語言。它使開發(fā)人員可以更快速、更容易地為微軟.NET平臺開發(fā)應用程序。1.1.2C#的特點1.1.3Microsoft.NET因此,它不僅是一個用戶體驗,而且是開發(fā)人員體驗的集合?!庇纱丝梢钥闯?,.NET是微軟為適應Internet發(fā)展的需要,所提供的特別適用于網(wǎng)絡編程和網(wǎng)絡服務的開發(fā)平臺。它將一切都Internet/Web化,讓應用程序通過互聯(lián)網(wǎng)來互相溝通,并共享彼此的資源。對開發(fā)人員來說,.NET是繼DOS開發(fā)平臺、Windows開發(fā)平臺之后,以互聯(lián)網(wǎng)為應用程序開發(fā)平臺的第三次改變。這次改變是以互聯(lián)網(wǎng)為基礎的,通過互聯(lián)網(wǎng)上標準的通信協(xié)議進行溝通,并以全新的開發(fā)環(huán)境來開發(fā)應用程序。在傳統(tǒng)的開發(fā)環(huán)境下,在不同的程序設計語言間進行代碼復用和應用集成,以及應用程序的跨平臺運行和溝通往往是比較困難的,但是在.NET環(huán)境下,開發(fā)人員不必擔心程序設計語言間的差異,不同語言開發(fā)出來的程序彼此可直接利用對方的源代碼,不同語言之間可以通過原始代碼相互繼承。2000年6月22日,微軟公布了其下一代基于互聯(lián)網(wǎng)平臺的軟件開發(fā)構想——.NET,在IT業(yè)界引起了廣泛關注。什么是Microsoft.NET呢?微軟總裁兼首席執(zhí)行官史帝夫·鮑爾默說:“.NET代表一個集合、一個環(huán)境、一個編程的基本結構,它作為一個平臺來支持下一代的互聯(lián)網(wǎng)。.NET是一個用戶環(huán)境,是一組基本的用戶服務,可以作用于客戶端、服務器端或任何地方,與改編成的模式具有良好的一致性,并且有新的創(chuàng)意。1.1.3Microsoft.NET這樣,在程序開發(fā)設計中,開發(fā)人員可根據(jù)功能需求的不同,隨心所欲地選擇不同的語言,這大大提高了軟件開發(fā)的效率。另外,在.NET環(huán)境下,由于采用了標準通信協(xié)議,因此可以實現(xiàn)應用程序在不同平臺上的溝通。.NET的核心是.NET框架(.NETFramework),它是構建以互聯(lián)網(wǎng)為開發(fā)平臺的基礎工具。.NET框架的結構如圖1-1所示。.NET框架的最上層是應用程序,可以大致分為面向網(wǎng)絡應用的ASP.NET程序和面向Windows系統(tǒng)的Windows應用程序,這兩類應用程序均可使用VC#.NET、VC++.NET、VB.NET等工具來編寫。2000年6月22日,微軟公布了其下一代基于互聯(lián)網(wǎng)平臺的軟件開發(fā)構想——.NET,在IT業(yè)界引起了廣泛關注。什么是Microsoft.NET呢?微軟總裁兼首席執(zhí)行官史帝夫·鮑爾默說:“.NET代表一個集合、一個環(huán)境、一個編程的基本結構,它作為一個平臺來支持下一代的互聯(lián)網(wǎng)。.NET是一個用戶環(huán)境,是一組基本的用戶服務,可以作用于客戶端、服務器端或任何地方,與改編成的模式具有良好的一致性,并且有新的創(chuàng)意。1.1.3Microsoft.NET.NET框架的中間層是基礎類庫,它提供了一個可供不同編程語言調用的、分層的、面向對象的函數(shù)庫。在傳統(tǒng)的開發(fā)環(huán)境中,各種程序設計語言都有自己的函數(shù)庫,但由于各種語言的編程方式不同,因此各函數(shù)庫及其調用方法也不同,這就使得跨語言編程更為困難。.NET框架提供了一個各種基于.NET的程序設計語言都可以調用的基礎類庫,這使得各種不同的編程有了一致性的基礎,減少了語言的界限。在.NET框架的基礎類庫中,有大量的基礎類,如窗體控件、通信協(xié)議、網(wǎng)絡存取等,并以分層的結構來分類。使用這些基礎類的方法非常簡單,繼承或直接調用即可,而且各種基于.NET的程序設計語言的調用方法都相同,如C#.NET、VC++.NET、VB.NET等。這樣,在應用程序設計中,就不再直接調用底層的系統(tǒng)API,有效簡化了應用程序設計的步驟,避免了應用程序設計中可能出現(xiàn)的問題。.NET框架的最底層是公共語言運行環(huán)境(CommonLanguageRuntime,CLR),它為程序代碼的跨平臺執(zhí)行提供了機制。通常,當使用一種程序設計語言編寫程序代碼后,編譯系統(tǒng)會將程序代碼與語言本身提供的函數(shù)庫結合,編譯成機器可直接執(zhí)行的本地代碼(NativeCode)。但是,當使用.NET程序設計語言編寫好程序代碼后,它會被編譯兩次,第一次是將程序代碼和基礎類組合編譯成中間語言(IntermediateLanguage,IL),第二次是在執(zhí)行時,.NET的公共語言運行環(huán)境會將中間語言載入內存,之后及時地將其編譯成運行平臺的CPU可以執(zhí)行的本地代碼。這樣,這些應用程序就可以在任何具有公共語言運行環(huán)境的平臺上運行。正是這樣的運行模式,使得應用程序可在不同環(huán)境下運行。1.1.3Microsoft.NET.NET的公共語言運行環(huán)境還提供了系統(tǒng)資源統(tǒng)一管理和統(tǒng)一安全機制。在互聯(lián)網(wǎng)結構下開發(fā)應用程序時,雖然互聯(lián)網(wǎng)的本質是開放,但是由于不同的系統(tǒng)平臺之間互不相容,因此各系統(tǒng)平臺之間的合作也僅限于特定的功能。例如,瀏覽器與網(wǎng)站服務器之間,通過HTTP(HyperTextTransportProtocol,超文本傳輸協(xié)議)協(xié)議來通信;電子郵件收發(fā)程序與服務器通過SMTP(SimpleMailTransferProtocol,簡單郵件傳輸協(xié)議)和POP3(PostOfficeProtocolVersion3,郵局傳輸協(xié)議版本3)協(xié)議存取信件等。但現(xiàn)在,.NET要建立的是各式各樣的網(wǎng)絡應用程序和網(wǎng)絡服務,要讓各種系統(tǒng)的應用程序通過互聯(lián)網(wǎng)溝通。要完成這樣強大的功能,除了內部結構的特點,最重要的一點就是.NET框架采用了XML和SOAP兩項關鍵技術,這保證了各種系統(tǒng)的應用程序可以通過互聯(lián)網(wǎng)方便地進行溝通,并共享彼此的資源。XML是當今的熱門技術之一,它是一種WordWideWebConsortium(W3C協(xié)會)標準下的結構化數(shù)據(jù)表達語言,提供了跨程序、跨平臺數(shù)據(jù)交換的公共格式。.NET對所有應用程序和系統(tǒng)的輸入/輸出均使用XML來封裝數(shù)據(jù),這樣可以方便地交換數(shù)據(jù),而不必再進行特定的轉換。SOAP(SampleObjectAccessProtocol,簡單對象訪問協(xié)議)是一種以XML為基礎的分布式對象通信協(xié)議。在SOAP的應用程序之間利用現(xiàn)有的互聯(lián)網(wǎng)結構可以實現(xiàn)彼此溝通,而不會被防火墻阻礙。但一般的開發(fā)人員不必過多了解底層的通信協(xié)議,這是.NET開發(fā)環(huán)境提供的功能。1.1.4C#的發(fā)展及C#13.0與VisualStudio2022的功能20%30%40%50%C#

一門專門為.NET推出的編程語言,對應SUN公司(2009年被Oracle公司收購)的Java。.NETFramework

C#的運行環(huán)境,對應JDK。.NET

微軟從C#9.0開始,將其真正開源支持跨平臺,包括.NET5.0、6.0、7.0、8.0等版本。VisualStudio

開發(fā)環(huán)境即IDE,對應Eclipse。1名詞解釋1.1.4C#的發(fā)展及C#13.0與VisualStudio2022的功能2主要版本一覽表1)版本命名規(guī)則(1)自2016年后,微軟轉向跨平臺戰(zhàn)略,推出.NETCore,后統(tǒng)一為“.NET”(如.NET5+)。(2)C#7.0+開始支持跨平臺開發(fā)(Windows操作系統(tǒng)、Linux操作系統(tǒng)、macOS)。2)VisualStudio的兼容性新版VisualStudio通常支持多個C#版本(如VisualStudio2022支持C#9.0~12.0),需通過項目配置文件(.csproj)指定語言版本。3)長期支持(LTS)版本(1).NETFramework4.8是最后一個Windows專屬框架。(2).NET6和.NET8是LTS版本,適合企業(yè)級長期維護。1.1.4C#的發(fā)展及C#13.0與VisualStudio2022的功能3C#的發(fā)展及C#13.01)C#的發(fā)展從C#1.0發(fā)布到如今的C#13.0,各版本的發(fā)布時間、對應.NET框架版本和對應VisualStudio版本詳見表1-1,此處不再贅述。這里簡要介紹C#各版本的功能發(fā)展。(1)C#1.0:基礎語法、類、接口、事件、屬性。(2)C#2.0:泛型、匿名方法、可空類型、迭代器。(3)C#3.0:LINQ、Lambda表達式、擴展方法、自動屬性、匿名類型。(4)C#4.0:動態(tài)類型、命名參數(shù)、可選參數(shù)、協(xié)變與逆變泛型。(5)C#5.0:異步編程(async/await)、調用方信息特性(CallerInfoAttributes)。(6)C#6.0:字符串插值($)、空值傳播(?.)、表達式體方法/屬性、nameof操作符。(7)C#7.0:元組與解構、模式匹配、局部函數(shù)、out變量直接聲明。(8)C#7.3:小版本增強,如Span<T>支持、unmanaged約束、元組等式比較優(yōu)化。(9)C#8.0:可空引用類型、異步流(IAsyncEnumerable)、范圍與索引(..和^)。(10)C#9.0:記錄類型(record)、頂層語句、模式匹配增強、init訪問器。(11)C#10.0:全局using、文件級命名空間、記錄結構、Lambda表達式改進。(12)C#11.0:原始字符串字面量、泛型數(shù)學支持、必需成員(required)、列表模式匹配。(13)C#12.0:主構造函數(shù)、集合表達式、Lambda參數(shù)默認值、別名任意類(usingAlias)。1.1.4C#的發(fā)展及C#13.0與VisualStudio2022的功能2)C#13.0C#13.0作為.NET9的一部分,具有以下主要功能和特點。(1)語言特性方面。擴展類型:打破了擴展方法僅能通過靜態(tài)類定義且只能擴展方法的限制,可擴展實例成員、靜態(tài)成員和屬性成員,提高了代碼的復用性、可維護性和可擴展性。params關鍵字擴展:不再局限于數(shù)組類型,現(xiàn)在可與System.Span、System.ReadOnlySpan和實現(xiàn)System.Collections.Generic.IEnumerable等可識別的集合類型一起使用,使方法接收可變數(shù)量參數(shù)時更加靈活。轉義序列“\e”:在Unicode字符串中可代表ESCAPE字符,等同于傳統(tǒng)的“\u001b”或“\x1b”,避免了與十六進制轉義序列混淆。部分屬性:允許屬性的定義和實現(xiàn)分布在不同的文件中,提高了代碼的組織性和可維護性,適用于與源代碼生成器等工具結合使用的場景。方法組自然類型改進:方法組自然類型改進使得調用變得更加簡單,減少了不必要的轉換。ref和unsafe在async()方法和迭代器中的使用:在async()方法和迭代器中,現(xiàn)在可以使用ref變量和不安全代碼,也可以在更多情況下使用這些特性。3C#的發(fā)展及C#13.01.1.4C#的發(fā)展及C#13.0與VisualStudio2022的功能(2)線程同步方面。新的鎖定對象:.NET9運行時引入了System.Threading.Lock類型,通過其API提供更好的線程同步,如Lock.EnterScope()方法可以進入獨占作用域并返回Lock.Scope對象、支持Dispose()方法退出獨占范圍,C#的lock語句也使用了更新的API。(3)性能優(yōu)化方面。異常處理速度提升:.NET9中的異常速度提高了2~4倍,應用可以更快速地處理異常。環(huán)路性能提升:通過環(huán)路提升和感應變量加寬來提高環(huán)路性能,使循環(huán)運行得更快、更高效。動態(tài)PGO:降低了類型檢查的成本,使應用運行得更快、更高效。RyuJIT編譯器改進:內聯(lián)更通用的方法,減少方法調用的開銷。Arm64指令集支持:由于Arm64代碼可使用SVE/SVE2SIMD指令編寫得更快,因此利用最新的Arm64硬件可提高運行速度。(4)其他方面。序列化改進:在System.Text.Json中,.NET9提供了新的選項用于序列化JSON,并引入JsonSerializerOptions.Web單例,使用Web默認值進行序列化更加容易。Linq新方法:新增了CountBy()和AggregateBy()方法,可按鍵聚合狀態(tài)分配中間分組而無須通過GroupBy命令;Index(IEnumerable)方法使得用戶可以快速提取可枚舉項的隱式索引。3C#的發(fā)展及C#13.0此外,新版的VisualStudio2022進行了全面優(yōu)化,添加了許多功能,可充分利用VisualStudio2022無縫云集成。其采用了新的.NET框架——WPFXAML設計器,加強了整個軟件的兼容性,也可以更好地支持新擴展模型。同時,其對C++工作負載進行了全面支持,可以自動檢測用戶的代碼輸入,也可以為用戶準確補全代碼。其新的語言特性簡化了代碼庫的管理流程,同時加快了用戶完成項目的速度。VisualStudio2022是由微軟全新推出的開發(fā)編程制作工具,其功能十分強大。例如,重構、導航、負載解決方案、編譯效果及調試器等,這些功能都可以使開發(fā)人員在工作時避免不必要的錯誤,提升工作效率。同時,它還內置支持Git版本控制克隆、創(chuàng)建和打開自己的存儲庫,其中,Git工具窗口包含提交和推送代碼更改、管理分支和解決合并沖突所需的一切內容。開發(fā)人員如果有GitHub賬戶,則可以直接在軟件中管理這些存儲庫。VisualStudio2022支持的集成開發(fā)環(huán)境、高級調試與診斷、測試工具、跨平臺開發(fā)及協(xié)作工具等,全面支持更快地編寫代碼,并且可以用于Android、iOS、Mac、Windows、Web和云的應用開發(fā)。1.1.4C#的發(fā)展及C#13.0與VisualStudio2022的功能4VisualStudio2022的新功能高效

以前32位應用程序運行過程中的內存限制(不能超出4GB內存),導致開發(fā)人員在使用VisualStudio開發(fā)調試時經(jīng)常出現(xiàn)“內存溢出”的問題。如今VisualStudio2022全面轉換為64位應用程序,將不再局限于4GB?,F(xiàn)代

使用.NETMAUI可開發(fā)跨平臺的移動版和桌面版應用,使用Blazor框架生成采用C#的響應式WebUI可在Linux環(huán)境中生成、調試、測試.NET和C++應用程序,為開發(fā)人員編寫基于多平臺的應用(Windows、Android、macOS、iOS)提供了便捷的途徑。創(chuàng)新由AI提供代碼完成功能,可以做到智能感知、智能編碼。目前主流的開發(fā)工具都在追求提高開發(fā)人員的編程效率,因此,在VisualStudio2022中,微軟融入了大量的人工智能因素,系統(tǒng)可以根據(jù)之前書寫的代碼內容、關鍵字等,自動提示之后的編碼內容,開發(fā)人員只需按一下Tab鍵,一長串代碼就會自動填充到編程方法中。輸入操作量減少但代碼產(chǎn)量增多

IntelliCode是一組功能強大的自動代碼完成工具,它可以了解代碼上下文,即變量名稱、函數(shù)和正在編寫的代碼的類型。這使IntelliCode能夠一次完成整行代碼,從而幫助開發(fā)人員更準確地進行編碼。對代碼的深入見解

CodeLens可以幫助開發(fā)人員快速找出代碼中的關鍵信息。010203040506共享多個屏幕LiveShare的實時協(xié)作會話功能可加快團隊的編輯和調試周期,無論代碼編寫使用的是何種語言或平臺,具有訪問控制功能和自定義編輯器設置的個性化會話都可以確保代碼的一致性和完整性。1.1.4C#的發(fā)展及C#13.0與VisualStudio2022的功能及時制止問題出現(xiàn)

集成調試是VisualStudio的核心部分,可以分步執(zhí)行代碼并查看存儲在變量中的值、代碼的執(zhí)行路徑,更改值的時間,以及需要在后臺查看的任何內容。即時影響

分析正在測試的代碼數(shù)量,并查看針對編碼效率優(yōu)化的測試套件中的即時結果。了解對代碼所做的每個更改的影響,并使用高級功能在開發(fā)人員鍵入代碼時對其進行測試。Azure部署Azure部署使部署到云變得更加簡單。提供通用應用程序類型和本地仿真器所需的所有模板,開發(fā)人員在VisualStudio2022中即可預配依賴項,如AzureSQL數(shù)據(jù)庫和Azure存儲賬戶,甚至可以使用直接連接到應用程序的遠程調試器快速診斷問題所在。集成的版本控制

VisualStudio2022內置支持Git版本的控制來克隆、創(chuàng)建和打開自己的存儲庫。Git工具窗口中包含提交和推送代碼更改、管理分支和解決合并沖突所需的一切功能。開發(fā)人員如果有GitHub賬戶,則可以直接在VisualStudio2022中管理存儲庫。AzureDevOpsServer支持

VisualStudio2022是一個“單兵作戰(zhàn)工具”,而AzureDevOpsServer(TFS)是一個“兵團作戰(zhàn)大本營”,它為開發(fā)團隊的協(xié)作提供了平臺支持,解決了作坊式開發(fā)過程中的大部分難題。07080910111.1.4C#的發(fā)展及C#13.0與VisualStudio2022的功能1.2C#的安裝、啟動和集成開發(fā)環(huán)境PARTTWO1.2.1C#的安裝C#是VisualStudio.NET的一部分,本書選用C#10.0(穩(wěn)定版)進行安裝與應用。作為一個強大的集成開發(fā)工具,VisualStudio.NET對系統(tǒng)環(huán)境有著較高的要求。因此,在安裝C#10.0(穩(wěn)定版)之前,要全面確定所使用計算機的軟、硬件配置情況,查看是否達到基本配置的要求,以便正確安裝并全面使用其強大的功能。1.硬件要求C#10.0(穩(wěn)定版)要求開發(fā)人員計算機的配置達到Windows10的硬件要求。中央處理器(CPU):建議采用2.4GHz或以上的64位(X64)處理器。內存(RAM):當系統(tǒng)運行時,VisualStudio.NET的IDE和操作系統(tǒng)都要占用很大的內存空間,推薦4GB、8GB、16GB(64位)及以上的內存。硬盤:推薦500GB(64位)或以上的硬盤。2.軟件要求操作系統(tǒng):Windows10及以上。數(shù)據(jù)庫:推薦MySQL、SQLServer、Access、IBMDB2、Oracle等數(shù)據(jù)庫。1.2.1C#的安裝3.安裝C#C#與其他的.NET語言相同,必須在.NET框架中運行。因此,要建立一個完整的C#開發(fā)平臺,必須安裝VisualStudio.NET和.NETFrameworkSDK(.NET框架軟件開發(fā)工具包)。無論操作系統(tǒng)是Windows10還是以上的版本,只要硬件配置滿足C#的要求就可以安裝C#。VisualStudio2022擁有全新的開發(fā)界面和諸多新功能。(1)下載完成后,雙擊“visualstudio2022.exe”并單擊“繼續(xù)”按鈕。(2)解壓縮安裝包,雙擊打開要安裝的應用程序,彈出安裝界面,開始進行VisualStudio2022的安裝。(3)勾選同意條款,隨后單擊“繼續(xù)”按鈕繼續(xù)安裝。在“工作負荷”選項卡中勾選“.NET桌面開發(fā)”選項,可根據(jù)自己的需求進行選擇,右側為所選項的插件,可根據(jù)需求自行選擇安裝,如圖1-3所示。1.2.1C#的安裝(4)切換至“單個組件”選項卡,如果有想要安裝的組件或不想安裝的組件,則可在該選項卡中勾選或取消勾選相應選項,如圖1-4所示。(5)“語言包”選項卡中默認選擇“中文(簡體)”,可根據(jù)需要選擇語言,此處不做修改。單擊“安裝”按鈕,開始安裝,如圖1-5所示。1.2.1C#的安裝(6)在“安裝位置”選項卡中選擇要安裝的位置,可以將C盤改為D盤,完成后單擊“安裝”按鈕,如圖1-6所示。(7)安裝成功后,程序會自動創(chuàng)建VisualStudio2022的所有程序組。在“已安裝”選項卡中單擊“啟動”按鈕,啟動程序組,如圖1-7所示。(8)啟動VisualStudio2022后,第一次運行會自動配置運行環(huán)境等,之后進入起始頁(打開或創(chuàng)建項目頁面),如圖1-8所示。至此,VisualStudio2022安裝完成。1.2.2C#的啟動由于VisualStudio.NET所包含的各語言工具使用的都是相同的集成開發(fā)環(huán)境,所以在啟動C#之前,要先啟動VisualStudio.NET。啟動C#開發(fā)環(huán)境有兩種方式,一種是在起始頁中選擇“打開項目或解決方案”選項,選擇現(xiàn)有的C#項目文件或.sln文件(.sln是VisualStudio的解決方案文件的后綴,解決方案是一個頂層文件,用于管理和組織多個項目,其中包括項目的引用、配置信息及用于構建和發(fā)布整個解決方案的步驟);另一種是在起始頁中選擇“創(chuàng)建新項目”選項,打開“創(chuàng)建新項目”對話框。新建項目的具體步驟如下。(1)在“創(chuàng)建新項目”對話框中選擇“控制臺應用”選項,隨后單擊“下一步”按鈕,如圖1-9所示。(2)設置C#、Windows、桌面等配置后,選擇“Windows窗體應用(.NETFramework)”選項,如圖1-10所示。1.2.2C#的啟動(3)在配置新項目和其他信息(.NET6.0長期支持)后,單擊“創(chuàng)建”按鈕,進入包含F(xiàn)orm1文件的頁面,如圖1-11所示。(4)單擊“Forml.cs”(或Program.cs)標簽,即可進入VisualStudio2022(C#Program.cs)開發(fā)環(huán)境,如圖1-12所示。1.2.3C#的集成開發(fā)環(huán)境C#的集成開發(fā)環(huán)境中包括設計、開發(fā)、編輯、測試、調試等多種功能,使得開發(fā)人員能夠方便、快速地開發(fā)應用程序。集成開發(fā)環(huán)境標題下方是菜單欄和工具欄。中央工作區(qū)是用來設計程序界面的窗體設計器和代碼編輯窗口。除此之外,集成開發(fā)環(huán)境的四周還有很多浮動窗口。1.菜單欄在菜單欄中,有若干菜單標題,每個菜單標題都有一個下拉式菜單,主要菜單標題如下。(1)文件:包括新建、打開、克隆存儲庫、添加、加入LiveShare會話、保存Program.cs、賬戶設置,頁面設置、打印、最近使用過的文件、最近使用過的項目和解決方案、退出等命令。(2)編輯:包括轉到、查找和替換、撤銷、復制、粘貼、刪除、書簽、IntelliSense、IntelliCode建議等命令。(3)視圖:包括顯示與隱藏工具欄、工具箱及各種獨立工具窗口的所有命令。(4)Git:包括克隆、創(chuàng)建Git存儲庫、本地存儲庫、提交或存儲、設置等命令。(5)項目:包括添加類、添加新數(shù)據(jù)源、添加新項、添加現(xiàn)有項、新建文件夾、從項目中刪除、顯示所有文件、添加項目引用、連接服務、設為啟動項目、導出模板等命令。1.2.3C#的集成開發(fā)環(huán)境C#的集成開發(fā)環(huán)境中包括設計、開發(fā)、編輯、測試、調試等多種功能,使得開發(fā)人員能夠方便、快速地開發(fā)應用程序。集成開發(fā)環(huán)境標題下方是菜單欄和工具欄。中央工作區(qū)是用來設計程序界面的窗體設計器和代碼編輯窗口。除此之外,集成開發(fā)環(huán)境的四周還有很多浮動窗口。(6)生成:包含生成解決方案、代碼生成、發(fā)布選定內容、批生成、配置管理器等命令。(7)調試:包括調試程序及啟動和中止當前應用程序運行的命令。(8)測試:包括運行和調試所有測試等命令。(9)分析:包括代碼清理、運行CodeAnalysis、計算代碼度量值、窗口等命令。(10)工具:包括獲取工具和功能、管理和預覽功能、連接到數(shù)據(jù)庫、代碼片段管理器、選擇工具箱項、導入導出設置、選項等命令。(11)擴展:管理擴展、自定義菜單等命令。(12)窗口:包括一些屏幕窗口布局的命令。(13)幫助:方便開發(fā)人員使用命令、注冊VisualStudio等。1.2.3C#的集成開發(fā)環(huán)境2.工具欄工具欄是由多個圖標按鈕組成的,可提供對常用命令的快速訪問。除了顯示在菜單欄下方的標準工具欄,還有Web工具欄、控件布局工具欄、團隊資源管理器等多種具有特定功能的工具欄。要顯示或隱藏這些工具欄,可選擇“視圖”菜單中的“工具欄”命令,或者在標準工具欄中右擊,在彈出的快捷菜單中選定所需工具欄。標準工具欄如圖1-13所示。1.2.3C#的集成開發(fā)環(huán)境3.工具箱工具箱中包含建立應用程序所需的各種控件及非圖形化的組件,如圖1-14所示。圖1-14工具箱工具箱由不同的選項組構成,各類控件、組件分別放在“公共控件”、“容器”、“菜單和工具欄”、“數(shù)據(jù)”、“組件”、“打印”、“對話框”、“AllWindowsForms”和“常規(guī)”等選項組中。(1)“數(shù)據(jù)”選項組主要放置用于訪問數(shù)據(jù)庫的控件。(2)“組件”選項組主要放置系統(tǒng)提供的組件,如時鐘、消息隊列等。(3)“對話框”選項組主要放置系統(tǒng)提供的對話框,如顏色、打開文件等。(4)“常規(guī)”選項組默認為空,可以在此處保存常用的控件,如自定義控件。(5)“AllWindowsForms”選項組是最常用的選項組,該選項組主要放置用于開發(fā)Windows應用程序所需的控件,如文本框、標簽框等。1.2.3C#的集成開發(fā)環(huán)境4.“解決方案資源管理器”窗口在C#中,項目是一個獨立的編程單位,其中包含窗體文件和其他相關文件,若干項目就可以組成一個解決方案?!敖鉀Q方案資源管理器”窗口如圖1-15所示,它以樹狀結構顯示整個解決方案中的項目,以及每個項目的組成信息。在C#中,所有包含C#代碼的源文件都以.cs為擴展名,不管該文件是包含窗體還是普通代碼,在“解決方案資源管理器”窗口中都將顯示這個文件,之后可以對它進行編輯。在每個項目的下面顯示了一個依賴項(有的叫“引用”),在這里列出了該項目依賴的組件。項目組成文件介紹如下。(1)Form1.cs:窗體文件,展開后包含F(xiàn)orm1.Designer.cs文件和Form1.resx文件。(2)Form1.Designer.cs:設計器自動生成的文件,其中主要是界面設計代碼。(3)Form1.resx:設計窗體時所嵌入的資源。(4)Program.cs:主程序的入口。1.2.3C#的集成開發(fā)環(huán)境(5)Properties:項目組件,定義了程序集的屬性。由AssemblyInfo.cs文件、Resources.resx文件、Settings.settings文件等組成。(6)AssemblyInfo.cs:其中包含用于設置項目的一些屬性。(7)Resources.resx:嵌入資源文件。(8)Settings.settings:配置文件。WinForm應用程序默認不創(chuàng)建App.config文件,可以通過右擊來添加應用程序配置文件?!敖鉀Q方案資源管理器”窗口上方有選項按鈕,如“刷新”、“顯示”和“屬性”等。通常,“解決方案資源管理器”窗口中會隱藏一些文件,單擊“顯示”按鈕,可以顯示隱藏的文件。“刷新”按鈕的作用是對沒有保存的項目文件進行刷新。單擊“屬性”按鈕,可以打開“屬性”窗口,顯示所選對象的屬性。1.2.3C#的集成開發(fā)環(huán)境(1)“對象”列表框:標識當前所選對象的名稱和所屬類。單擊右側的下拉按鈕,可列出所含對象的列表,從中選擇要設置屬性的對象即可。在圖1-16中,最上方是“對象”列表框,其中的“checkedListBox1”對象屬于“System.Windows.Forms.CheckedListBox”類。(2)選項按鈕:常用的兩個按鈕分別是“按分類順序”按鈕和“按字母順序”按鈕,可選擇其中一種排列方式顯示所選對象的屬性。“按分類順序”是根據(jù)屬性的性質分類列出對象的各個屬性;“按字母順序”是根據(jù)字母順序列出所選對象的所有屬性。(3)“屬性”列表框:分為兩部分,左側用于列出所選對象的屬性名稱,右側用于列出對應的屬性值,可對該屬性值進行設置或修改。如果屬性值右側出現(xiàn)“…”按鈕或“▼”按鈕,則表示有預定值可供選擇。圖1-16中選擇的Items屬性,其屬性值是“集合”,單擊其右側的“...”按鈕,可在字符串集合編輯器中提供checkedListBox1控件的成員字符串。(4)事件列表框:提供所選擇控件的事件列表以選擇事件,如選擇checkedListBox1控件事件列表中的SelectIndexChanged事件。5.“屬性”窗口“屬性”窗口如圖1-16所示,用于顯示和設置所選的控件或窗體等對象的屬性(這里選定的是checkedListBox1控件的屬性)。在應用程序設計時,可通過“屬性”窗口設置或修改對象的屬性?!皩傩浴贝翱谥饕梢韵聨撞糠纸M成。1.2.3C#的集成開發(fā)環(huán)境1.2.3C#的集成開發(fā)環(huán)境在“視圖”菜單中選擇“代碼”命令、雙擊窗體或窗體中的某個控件,均可打開代碼編輯窗口?!按a編輯”窗口左上方為“項目”列表框,本例為“WindowsFormsApp1”項目,中間為“對象”列表框,單擊其下拉按鈕,可顯示項目中全部對象的名稱,本例“WindowsFormsApp1.Forml對象(類)”。右上方為“事件、方法”列表框,其中列出了與所選對象相關的事件、方法,本例選擇的是label1-Click(objectsender,EventArgse)事件。通常,在編寫事件過程時,在“對象”列表框中選擇對象(類)名稱,在“事件、方法”列表框中選擇對應的事件過程名稱后,即可構成所選對象的事件過程模板,可在該事件過程模板中編寫事件過程代碼?!按a編輯”窗口有兩個顯著的特點:一個是表示項目窗體和控件的代碼,現(xiàn)在均為可見,如圖1-17所示的代碼編輯器窗口中的“publicpartialclassForm1”就是窗體Form1的代碼段;另一個是C#的代碼窗口,就像Windows資源管理器左側的樹狀目錄結構一樣,一個代碼塊、一個過程,甚至一段注釋都可以疊為一行。在圖示的代碼編輯窗口中,可以看到其中幾行代碼左側有“-”號,單擊“-”號可以隱藏一段代碼,只顯示第一行;除了“-”號還有“+”號(圖中未顯示),而單擊“+”號則可以展開一段代碼。這樣使得程序結構一目了然,方便代碼的管理,同時有利于程序的開發(fā)和設計。6.“代碼編輯”窗口“代碼編輯”窗口是用于代碼設計的窗口,各種事件過程、模塊和類等代碼的編寫和修改均在此窗口中進行。1.2.3C#的集成開發(fā)環(huán)境7.窗體設計器當創(chuàng)建和打開一個C#項目時,在其集成開發(fā)環(huán)境的工作區(qū)域中將顯示一個窗體設計器。窗體是一個容器,可放置應用程序所需的所有控件圖形和圖片,可隨意改變大小和移動方向。窗體設計器是用于設計和編制應用程序的用戶接口,即設計應用程序的界面。C#應用程序的設計是以窗體為依托進行的,應用程序中的每一個窗口都有屬于自己的窗體設計器,其中最常用的窗體設計器是Windows窗體設計器。在這個窗體設計器中可以拖動各種控件,創(chuàng)建Windows應用程序界面。除此之外,在C#中創(chuàng)建項目時,還會用到創(chuàng)建Web界面的Web窗體設計器。1.2.3C#的集成開發(fā)環(huán)境8.其他窗口(1)“類視圖”窗口:如圖1-18所示的“類視圖”窗口,按照樹狀結構列出了解決方案中的各個類,以及其中包含的事件、方法和函數(shù)等。雙擊視圖中的任意元素,即可打開對應元素的代碼窗口,這對于瀏覽代碼是一種很方便的方式。(2)“對象瀏覽器”窗口:在“對象瀏覽器”窗口中,可以方便地查找程序中使用的所有對象的信息,包括程序中引用的系統(tǒng)對象和用戶自定義的對象。在對象瀏覽器的左側窗口中,以樹狀分層結構顯示系統(tǒng)中用到的所有類。雙擊任意類,右側窗口中將顯示這個類的屬性、方法、事件等。“對象瀏覽器”窗口如圖1-19所示。(3)“服務器資源管理器”窗口:C#是面向網(wǎng)絡的開發(fā)工具,在軟件開發(fā)中,利用“服務器資源管理器”窗口可以方便地監(jiān)控和管理網(wǎng)絡上的其他服務器?!胺掌髻Y源管理器”窗口如圖1-20所示。(4)“輸出”窗口:在“輸出”窗口中,可以輸出程序運行時產(chǎn)生的信息,包括在應用程序中設定的要輸出的信息和編程環(huán)境提示的信息,如圖1-21所示。(5)命令窗口:“命令窗口”為用戶提供了一個使用命令與系統(tǒng)交互的環(huán)境,如圖1-22所示。在“命令窗口”中用戶可以直接使用各種命令,如直接輸入“toolbox”命令,就可以調出工具箱。1.2.3C#的集成開發(fā)環(huán)境謝謝觀看第2章簡單的C#程序設計C#程序設計教程(第6版)01知識目標:使學生了解C#程序設計的基礎知識,包括C#程序結構和輸入/輸出方法等。03思政目標:萬事開頭難,培養(yǎng)學生的踏實作風,從第一步邁起。02能力目標:使學生能夠進行第一個簡單的C#程序編寫和輸入/輸出操作。本章學習目標2.1C#程序結構PARTONE2.1.1第一個C#程序下面將使用VisualStudio.NET提供的項目模板來創(chuàng)建一個控制臺應用程序(ConsoleApplication)。這個程序將在窗口中顯示“歡迎使用C#”字符串。創(chuàng)建C#控制臺應用程序。選擇“新建”→“項目”命令,打開“創(chuàng)建新項目”對話框,如圖2-1所示。在“創(chuàng)建新項目”對話框左側的“最近使用項目的模板”列表框中選擇“控制臺應用”選項,隨后單擊“下一步”按鈕。在彈出的“配置新項目”對話框中填寫項目名稱,對應的文本框中會有一個默認名稱,并且“位置”文本框將自動顯示項目文件所處目錄。用戶可以根據(jù)需要改變項目名稱。如果要改變項目的位置,則可以單擊“位置”文本框右側的“瀏覽”按鈕,打開“項目位置”對話框并選擇目錄。在本例中,設置項目名稱為“Welcome”,位置為“C:\C#”,如圖2-2所示。在“其他信息”對話框中默認框架為“.NET6.0”,單擊“創(chuàng)建”按鈕,VisualStudio.NET將自動生成代碼。刪除窗口中的默認代碼并輸入例2-1給出的代碼(這些代碼的含義以后將會介紹),第一個C#程序如圖2-3所示。2.1.1第一個C#程序2.1.2編譯和執(zhí)行程序要編譯C#程序,需選擇“生成”→“生成解決方案”命令。這時,C#編譯器將會開始編譯、鏈接程序,最終生成可執(zhí)行文件。在“輸出”窗口中可查看生成結果,如圖2-4所示。當編譯過程中出現(xiàn)錯誤時,VisualStudio會自動打開如圖2-5所示的“錯誤列表”窗口,其中列出了編譯過程中的每一個錯誤。開發(fā)人員可以通過雙擊“錯誤列表”窗口中的錯誤項,直接跳轉到對應的代碼行。如果程序中沒有出現(xiàn)錯誤,則編譯器將會生成可執(zhí)行文件。在VisualStudio中,開發(fā)人員可以采用兩種方式運行程序:一種是調試運行,另一種是直接運行。要調試運行程序,可以選擇“調試”→“開始調試”命令、單擊工具欄的“啟動調試”按鈕或直接按下F5鍵;要直接運行程序,可以選擇“調試”→“開始執(zhí)行”命令或按Ctrl+F5快捷鍵。運行本例中的程序,結果如圖2-6所示。1.命名空間第一條語句“usingSystem”表示導入System命名空間。“Console.WriteLine("歡迎使用C#")”語句中的“Console”是System命名空間包含的.NET系統(tǒng)類庫中的一個定義好的類,它代表系統(tǒng)控制臺,即字符界面的輸入與輸出。C#程序是用命名空間來組織代碼的,要訪問某個命名空間中的類或對象,必須使用以下語法格式。命名空間.類名由于Console類位于System命名空間,所以實際上在訪問Console類時,完整的寫法如下所示。System.Console但是,在程序的第一行使用了“usingSystem;”語句。由于這條語句使用“using”導入System命名空間,這樣在本程序中就可以直接使用System命名空間中的類或對象,所以訪問Console類就不需要再使用“System.Console”,直接使用“Console”即可。2.1.3C#程序結構分析2.類C#要求程序中的每個元素都要屬于一個類。第二條語句“classWelcome”聲明了一個類,類的名字為Welcome。這個程序的功能就是依靠它來完成的。C#程序由大括號“{}”構成,程序中的每一對大括號都構成一個塊。大括號是成對出現(xiàn)的,可以嵌套(塊內可以出現(xiàn)子塊)使用,嵌套深度不受限制,也可以嵌套任意層,但一定要保證左括號“{”和右括號“}”成對出現(xiàn),否則程序就是錯誤的。3.Main()方法第三條語句“staticvoidMain()”是程序的入口。這行代碼所定義的是Welcome類的一個靜態(tài)方法。C#規(guī)定,名字為Main()的靜態(tài)方法是程序的入口。當程序執(zhí)行時,會直接調用該方法。該方法包含一對大括號,大括號中的語句就是可執(zhí)行語句,也就是所要執(zhí)行的功能,在本例中,該方法要執(zhí)行的功能是輸出“歡迎使用C#”字符串。方法的執(zhí)行從左括號開始,到右括號結束。從例2-1中還可以看出,Main()方法的所有內容都被包含在一對大括號中,這是Welcome類所帶的一對大括號,該大括號中的所有內容都是Welcome類的成員。在C#程序中,程序的執(zhí)行總是從Main()方法開始。一個C#程序不允許出現(xiàn)兩個或兩個以上的Main()方法,而且Main()方法必須包含在一個類中。2.1.3C#程序結構分析4.注釋在程序編寫過程中,常常要對程序中比較重要或需要注意的代碼加以說明,但這些說明不參與程序的執(zhí)行。通常采用注釋的方式將說明寫在程序中。合理的注釋非但不會浪費編寫程序的時間,反而會讓程序結構更加清晰,這是一個良好的編程習慣。C#提供了兩種注釋方法。(1)單行注釋:“//”后面的內容作為注釋內容,該方式只對所處行生效。(2)多行注釋:在第一行的注釋內容前使用“/*”,在末尾行的注釋內容后使用“*/”,被“/*”和“*/”所包含的內容都作為注釋內容。通過以上分析可以看出,C#程序的基本結構如下。/*導入.NET系統(tǒng)類庫提供的命名空間System*/usingSystem;classWelcome //定義類{staticvoidMain() /*程序的入口。其中,static表示Main()

方法是一個靜態(tài)方法,void表示該方法沒有返回值*/{Console.WriteLine("歡迎使用C#");//輸出“歡迎使用C#”字符串

}}2.1.3C#程序結構分析標識符(identifier)是一串字符,在程序中作為標識,用來代表一個名字。通常在需要定義一個類或生成一個對象時,類的名字和對象的名字就是一個標識符。但是,并不是任何一串字符都可以作為C#的標識符。(1)一個合法的C#標識符,是以字母或下畫線開頭的,其后可以添加任意字母、數(shù)字或下畫線。以下是合法的C#標識符。_thisMyComputer001StarT_Of_ProgramA7dll以下是非法的C#標識符。6ya(以數(shù)字開頭)m#(“#”號既不是字母和下畫線,也不是數(shù)字)(2)C#標識符嚴格區(qū)分大小寫,即使兩個標識符的字母相同但大小寫不同,也會被認為是兩個完全不同的標識符,如xyz和xYz。(3)關鍵字也可以作為標識符,在關鍵字前加上“@”前綴即可。關鍵字是一種屬于語言成分的特殊標識符,通常是系統(tǒng)保留的,C#不允許開發(fā)人員在程序中使用這些標識符定義各種名稱。2.1.4標識符2.1.4標識符直接使用關鍵字作為標識符是不被允許的,這是非法的,但關鍵字出現(xiàn)在標識符中,作為標識符的組成部分是被允許的。例如:uint2in__uintxlock在C#中,可以使用“@”作為標識符的前綴(標識符以“@”開頭),它是一個很特殊的字符?!癅”只能作為標識符的開頭,不能出現(xiàn)在標識符字符序列的其他位置。為關鍵字添加“@”前綴后,它們就成了合法標識符。例如:@uint@operator2.2輸入/輸出方法PARTTWOWriteLine()方法的作用是將信息輸出到控制臺中,但是該方法會在輸出信息后面添加一個換行符,產(chǎn)生一個新行。在WriteLine()方法中,可以采用“{N[,M][:格式化字符串]}”形式來格式化輸出字符串,其中參數(shù)的含義如下。大括號“{}”用來在輸出字符串中插入變量值。N表示輸出變量的序號,從0開始。當N為0時,則對應輸出第1個變量值,當N為5時,則對應輸出第6個變量值,依次類推。[,M]為可選項,M表示輸出的變量所占的字符個數(shù)。當變量值為負數(shù)時,則輸出的變量按照左對齊的方式排列;當變量值為正數(shù)時,則輸出的變量按照右對齊的方式排列。[:格式化字符串]為可選項,在控制臺中輸出時,常常需要指定輸出字符串的格式??梢允褂肵n形式來指定輸出字符串的格式,其中X用于指定數(shù)字的格式,n用于指定數(shù)字的精度,即有效數(shù)字的位數(shù)。常用的格式字符有7種,如表2-2所示。2.2.1WriteLine()方法1.貨幣格式格式字符C或c的作用是將數(shù)據(jù)轉換為貨幣格式,在格式字符C或c后面的數(shù)字表示轉換后的貨幣格式數(shù)據(jù)的小數(shù)位數(shù),默認值為2。例如:doublek=1234.789;Console.WriteLine("{0,8:c}",k); //結果是¥1,234.79Console.WriteLine("{0,10:c4}",k); //結果是¥1,234.78902.整數(shù)類型格式格式字符D或d的作用是將數(shù)據(jù)轉換為整數(shù)類型格式,在格式字符D或d后面的數(shù)字表示轉換后的整數(shù)數(shù)據(jù)的位數(shù)。這個數(shù)字通常是正數(shù),如果這個數(shù)字大于整數(shù)數(shù)據(jù)的位數(shù),則格式數(shù)據(jù)將在首位前補充0;如果這個數(shù)字小于整數(shù)數(shù)據(jù)的位數(shù),則顯示所有的整數(shù)位數(shù)。例如:intk=1234;Console.WriteLine("{0:d5}",k); //結果是01234Console.WriteLine("{0:D}",k); //結果是1234Console.WriteLine("{0:d3}",k); //結果是12342.2.1WriteLine()方法3.科學記數(shù)法格式格式字符E或e的作用是將數(shù)據(jù)轉換為科學記數(shù)法格式,在格式字符E或e后面的數(shù)字表示轉換后的科學記數(shù)法格式數(shù)據(jù)的小數(shù)位數(shù),如果省略這個數(shù)字,則顯示7位有效數(shù)字。例如:intk=123000;doublef=1234.5578;Console.WriteLine("{0:E}",k); //結果是1.230000E+005Console.WriteLine("{0:e}",k); //結果是1.230000e+005Console.WriteLine("{0:E}",f); //結果是1.234558E+003Console.WriteLine("{0:e}",f); //結果是1.234558e+003Console.WriteLine("{0:e4}",k); //結果是1.2300e+005Console.WriteLine("{0:e4}",f); //結果是1.2346e+0034.浮點類型格式格式字符F或f的作用是將數(shù)據(jù)轉換為浮點類型格式,在格式字符F或f后面的數(shù)字表示轉換后的浮點數(shù)據(jù)的小數(shù)位數(shù),默認值為2,如果指定的小數(shù)位數(shù)大于數(shù)據(jù)的小數(shù)位數(shù),則在數(shù)據(jù)末尾補充0。2.2.1WriteLine()方法5.通用格式格式字符G或g的作用是將數(shù)據(jù)轉換為通用格式,依據(jù)系統(tǒng)要求的轉換后的格式字符串最短原則,通用格式可能使用科學記數(shù)法格式來表示,也可能使用浮點類型格式來表示。例如:doublek=1234.789;intj=123456;Console.WriteLine("{0:g}",j); //結果是123456Console.WriteLine("{0:g}",k); //結果是1234.789Console.WriteLine("{0:g4}",k); //結果是1235Console.WriteLine("{0:g4}",j); //結果是1.235e+05其中,g4的4表示保留4位有效數(shù)字,k的原值1234.789有7位有效數(shù)字,變成4位有效數(shù)字后四舍五入結果為1235;j的原值123456有6位有效數(shù)字,變成4位有效數(shù)字后四舍五入結果為123500,由于整數(shù)位數(shù)(6位)超過精度值(4位),系統(tǒng)自動切換為科學記數(shù)法:1.235e+05。g格式是無精度說明符,不等同于g4。k(g):{0:g}輸出1234.789,g格式默認保留足夠的有效數(shù)字,以完整保留數(shù)值(不丟失精度);j(g):{0:g}輸出123456,整數(shù)默認直接顯示完整值,不會添加小數(shù)點或以科學記數(shù)法顯示,g格式對整數(shù)不會進行任何截斷或四舍五入操作。2.2.1WriteLine()方法6.自然數(shù)據(jù)格式格式字符N或n的作用是將數(shù)據(jù)轉換為自然數(shù)據(jù)格式,其特點是數(shù)據(jù)的整數(shù)部分每3位用“,”分隔,格式字符N或n后面的數(shù)字表示轉換后的自然數(shù)據(jù)格式的小數(shù)位數(shù),默認值為2。例如:doublek=211122.12345;intj=1234567;Console.WriteLine("{0:N}",k); //結果是211,122.12Console.WriteLine("{0:n}",j); //結果是1,234,567.00Console.WriteLine("{0:n4}",k); //結果是211,122.1235Console.WriteLine("{0:n4}",j); //結果是1,234,567.00007.十六進制數(shù)據(jù)格式格式字符X或x的作用是將數(shù)據(jù)轉換為十六進制數(shù)據(jù)格式,在格式字符X或x后面的數(shù)字表示轉換后的十六進制數(shù)據(jù)的數(shù)據(jù)位數(shù)。例如:intj=123456;Console.WriteLine("{0:x}",j); //結果為1e240Console.WriteLine("{0:x6}",j); //結果為01e240另外,可以不使用參數(shù)來調用WriteLine()方法,這時將在控制臺中產(chǎn)生一個新行。2.2.1WriteLine()方法2.2.2Write()方法Write()方法的作用與WriteLine()方法的類似,都是將信息輸出到控制臺中,但是Write()方法將信息輸出到控制臺后并不會產(chǎn)生一個新行,即換行符不會連同信息一起輸出,光標將停留在所輸出信息的末尾。Write()方法可以直接把變量值轉換為字符串并輸出到控制臺中,此外,可以使用指定格式輸出信息,即使用2.2.1節(jié)中介紹的格式化方法來格式化輸出信息。在Write()方法中,也可以采用“{N[,M][:格式化字符串]}”形式來格式化輸出字符串,其中的參數(shù)含義與WriteLine()方法的相同。2.2.3ReadLine()方法ReadLine()方法的作用是從控制臺中讀取數(shù)據(jù),一次讀取一行字符,直到用戶按下Enter鍵才會返回。但是,ReadLine()方法并不接收Enter鍵,如果該方法沒有接收到任何輸入,或者接收了無效輸入,那么該方法將返回null。2.2.3ReadLine()方法Read()方法的作用是從控制臺中讀取下一個字符,一次只能讀取一個字符,直到用戶按下Enter鍵才會返回。當Read()方法返回時,如果控制臺中包含有效輸入,則返回一個表示輸入字符的整數(shù),該整數(shù)為字符對應的Unicode編碼值;如果控制臺中沒有輸入,或者只有無效輸入,則返回-1。如果輸入了多個字符,則按下Enter鍵后控制臺中將包含輸入的字符加上Enter鍵'\r'(13)和換行符'\n'(10),但Read()方法只返回輸入的第一個字符。但是,用戶可以多次調用Read()方法來獲取所有輸入的字符。謝謝觀看第3章數(shù)據(jù)類型、運算符與表達式C#程序設計教程(第6版)01知識目標:使學生了解C#的數(shù)據(jù)類型、常量與變量、運算符與表達式等基礎知識。03思政目標:使學生了解事物的類型是由事物的主要矛盾所決定的,且在一定的條件下會發(fā)生轉化。02能力目標:使學生能夠進行裝箱和拆箱等類型轉換。本章學習目標3.1數(shù)據(jù)類型PARTONE3.1.1值類型在C#中,值類型包括3種:簡單類型、結構類型和枚舉類型。不同類型是不同數(shù)據(jù)的集合,在C#中使用不同的類型標識符來表示。這里只介紹簡單類型,結構類型和枚舉類型將在后續(xù)章節(jié)中進行介紹。簡單類型包括整數(shù)類型、浮點類型、小數(shù)類型、字符類型和布爾類型等。1.整數(shù)類型整數(shù)類型的數(shù)據(jù)值只能是整數(shù)。數(shù)學上的整數(shù)可以是負無窮大到正無窮大,但這在計算機中是不可能的,畢竟計算機的存儲單元是有限的,因此計算機語言所提供的數(shù)據(jù)類型是有一定范圍的。C#提供了8種整數(shù)類型,如表3-1所示。3.1.1值類型(1)單精度浮點型:取值范圍為±1.5×10-45~3.4×1038,精度為7位。(2)雙精度浮點型:取值范圍為±5.0×10-324~1.7×10308,精度為15~16位。對于浮點類型的數(shù)據(jù),需要注意以下問題。(1)對于+0和-0,雖然大部分情況下兩者被認為是相同的簡單類型數(shù)值,但是在某些情況下需要區(qū)別對待。(2)正無窮大和負無窮大一般在除數(shù)為0的情況下產(chǎn)生。例如,216.5/0.0或-216.5/0.0。(3)存在非數(shù)字值(Not-a-Number,簡稱NaN)。當出現(xiàn)0.0/0.0這種非法運算時,就會出現(xiàn)非數(shù)字值。對于浮點運算,如果運算結果在精度范圍內小到一定程度,那么系統(tǒng)會當0值處理(+0或-0)。同樣地,如果運算結果在精度范圍內大到一定程度,那么系統(tǒng)會當無窮大處理。如果二元運算的操作數(shù)都是NaN,那么結果也是NaN。2.浮點類型在C#中,小數(shù)采用浮點類型表示。浮點類型有兩種:單精度浮點型和雙精度浮點型,區(qū)別在于取值范圍和精度。計算機對浮點數(shù)據(jù)的運算速度大大低于對整數(shù)的運算速度,數(shù)據(jù)的精度越高對計算機的資源要求就越高,因此在對精度要求不高的情況下,可以采用單精度類型,而在精度要求較高的情況下,可以采用雙精度類型。單精度類型是32位,雙精度類型是64位。浮點類型數(shù)據(jù)的取值范圍和精度如下。3.1.1值類型小數(shù)類型:取值范圍為±1.0×10-28~7.9×1028,精度為29位。小數(shù)類型數(shù)據(jù)的取值范圍遠小于浮點類型數(shù)據(jù)的取值范圍,不過它的精度比浮點類型的精度高得多,所以相同的數(shù)字對兩種類型來說可能表達的內容并不相同。值得注意的是,小數(shù)類型數(shù)據(jù)的后面必須跟“m”或“M”后綴來表示它是小數(shù)類型的,如3.14m、0.28m等,否則會被解釋成標準的浮點類型數(shù)據(jù),從而導致數(shù)據(jù)類型不匹配。在程序中書寫一個十進制的數(shù)值常數(shù)時,C#默認按照以下方法判斷該常數(shù)屬于哪種數(shù)值類型。(1)如

溫馨提示

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

評論

0/150

提交評論