版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1.1C#基礎知識
1.2VisualStudio2019
1.3C#中的數(shù)據(jù)類型
1.4變量與常量
1.5運算符和表達式
1.6C#控制結構
1.7數(shù)組
1.8方法
1.9面向?qū)ο缶幊?.1C#基礎知識1.1.1相關專業(yè)術語1.C#C#是一種編程語言,是官方推出的進行.Net開發(fā)的主流開發(fā)語言,開發(fā)者可以使用C#語言在基于.Net的平臺上利用.NetFramework框架開發(fā)出各種應用。2..Net與.NetFramework人們通常說的.Net指的是.Net平臺(軟件開發(fā)平臺),.NetFramework是平臺的核心框架,該框架是.Net平臺中必不可少的組成部分。兩者之間的關系為:.NetFramework框架包含于.Net平臺,它能夠給開發(fā)者提供一個穩(wěn)定的開發(fā)環(huán)境,從而使得開發(fā)者在.Net平臺上開發(fā)的各應用能正常運轉(zhuǎn)。3.MicrosoftMicrosoft的中文名稱為微軟,是美國的一家跨國科技公司,并且在開發(fā)PC軟件方面被稱作先導者。它是由比爾·蓋茨與保羅·艾倫于1975年創(chuàng)辦的,以研發(fā)、制造、授權和提供廣泛的電腦軟件服務業(yè)務為主,是目前世界上最大的計算機軟件供應商。4.VisualStudioVisualStudio的全稱為MicrosoftVisualStudio,簡稱為VS,是美國微軟公司的開發(fā)工具包系列產(chǎn)品。VS是一個基本完整的開發(fā)工具集,它包括整個軟件生命周期中所需要的大部分工具,所寫的目標代碼適用于微軟支持的所有平臺。C#語言的主流開發(fā)平臺便是VS。如今,VS已有眾多版本,包括VS2015、VS2017、VS2019等。1.1.2使用記事本編程實際上,C#開發(fā)與Java開發(fā)類似,都可以采用記事本等文本編輯工具進行開發(fā)。下面介紹如何使用記事本編寫C#程序。首先打開cmd(命令提示符)窗口,在窗口中輸入csc命令,檢查系統(tǒng)是否安裝了CSC編譯器。如果出現(xiàn)如圖1.1所示的的提示,則有兩種可能性:一種是由于未安裝CSC編譯器而導致的,那么需要安裝CSC編譯器;另一種是已經(jīng)安裝了CSC編譯器,那么需要手動把CSC編譯器添加到環(huán)境變量里。如果讀者已安裝了VS,那么只需要找到編譯器的安裝路徑,把路徑加到環(huán)境變量里即可。添加成功后,重新打開cmd窗口,輸入csc命令后的顯示界面如圖1.2所示。在互聯(lián)網(wǎng)行業(yè)快速發(fā)展的今天,隨著數(shù)據(jù)量的不斷增長,數(shù)據(jù)采集已經(jīng)被廣泛應用于互聯(lián)網(wǎng)及分布式領域。下面來創(chuàng)建一個以.cs結尾的文件。(1)在任意目錄下創(chuàng)建一個記事本文檔,如圖1.3所示。(2)在文檔中添加一段最簡單的C#代碼,如圖1.4所示。(3)將文件后綴名改為.cs(.cs是C#程序類文件默認的擴展名),文件名建議修改為英文。(4)打開cmd窗口,編譯.cs文件,運行編譯后的.exe文件。打開cmd窗口,切換文件目錄至.cs文件所在目錄。具體步驟為:首先輸入“盤符:”;然后輸入“cd目標路徑”。切換過程如圖1.6所示。(5)編譯.cs文件如圖1.7所示,編譯完成后,在.cs文件的同一目錄下會出現(xiàn)同名的.exe文件。編譯時在cmd窗口輸入“css文件名稱.cs”。(6)在.cs文件被成功編譯的前提下,可在cmd窗口運行編譯好的.exe文件,如圖1.8所示。直接輸入.exe文件的名字即可(加不加.exe擴展名都可以)。1.2VisualStudio20191.2.1VisualStudio2019的使用1.創(chuàng)建項目在VS2019中創(chuàng)建一個新的項目,有兩種創(chuàng)建方法。一種是根據(jù)提示在初始界面中選擇“創(chuàng)建新項目”的方式進行創(chuàng)建;另一種是在初始界面中選擇“繼續(xù)但無需代碼”后,使用菜單欄目錄或快捷鍵的方式進行創(chuàng)建。兩種方法的具體步驟如下:【方法一】(1)打開VS2019軟件,在初始界面中點擊“創(chuàng)建新項目”。(2)在彈出的創(chuàng)建新項目界面中有3個下拉菜單欄,分別為C#、Windows和控制臺,進行篩選后選擇“控制臺應用(.NETFramework)”,然后點擊“下一步”按鈕。(3)進入配置新項目界面,在該界面中,需要輸入項目名稱,選擇項目放置位置和要使用的框架,項目名稱建議使用英文。(4)點擊圖1.11中的“創(chuàng)建”按鈕后進入如圖1.12所示的界面,代表項目創(chuàng)建成功,項目名與解決方案名默認一致,該項目中的默認類名為Program.cs?!痉椒ǘ?1)打開VS2019軟件,在如圖1.13所示的初始界面中點擊“繼續(xù)但無需代碼”,進入如圖1.14所示的界面。(2)在圖1.14界面的左上角菜單欄里依次選擇“文件”→“新建”→“項目”,或使用快捷鍵“Ctrl+Shift+N”,都可進入創(chuàng)建新項目界面(如圖1.10所示),后續(xù)步驟與方法一相同。2.打開已有項目在VS2019中打開某個已經(jīng)創(chuàng)建的項目,有兩種情況,即已在當前的VS2019中創(chuàng)建過的項目和未在當前的VS2019中創(chuàng)建過的項目。若即將打開的項目已在當前的VS2019中創(chuàng)建過,則在打開軟件進入初始界面后,界面左側會出現(xiàn)該項目的相關信息,直接點擊進入即可。若即將打開的項目未在當前的VS2019中創(chuàng)建過,則需手動導入,這就存在兩種情況,具體如下:(1)若當前處于初始界面,選擇界面右側的“打開本地文件夾”或者“打開項目或解決方案”,找到項目的存儲位置,選中后進入圖1.14所示界面,雙擊想要打開的.cs文件便可進入編輯界面。(2)若當前處于圖1.12或圖1.14界面,在左上角菜單欄中依次選擇“文件”→“打開”→“項目/解決方案”或者“文件”→“打開”→“文件夾”,找到項目的存儲位置,選中即可,選中后進入如圖1.15所示的導入項目界面。顯然,圖1.15所示界面中已出現(xiàn)導入項目的信息,此時只需雙擊想要打開的.cs文件便可進入編輯界面。3.在同一解決方案下創(chuàng)建多個項目一個解決方案可包含多個項目。在初次創(chuàng)建新項目時,默認生成一個解決方案,一個解決方案里默認包含一個項目,若想在一個解決方案下創(chuàng)建多個項目,則需使用下述方法,具體步驟如下:(1)若想創(chuàng)建多個項目,則可在解決方案資源管理器中單擊鼠標右鍵,依次選擇“解決方案名”→“添加”→“新建項目”,進入創(chuàng)建新項目界面,選擇“控制臺應用(.NETFramework)”,然后點擊“下一步”按鈕。(2)進入配置新項目界面。因為此時的項目是在已有的解決方案下新建的,所以界面沒有“解決方案”一欄。在此界面中,只需輸入項目名稱即可。需要注意的是,項目名稱不可與本解決方案下已有的項目名稱相同,否則會出現(xiàn)警告框。(3)點擊“創(chuàng)建”按鈕,進入如圖1.18所示界面,表示新建項目成功,此時該界面右側的“解決方案”里會出現(xiàn)兩個項目。4.在某個項目下創(chuàng)建多個類C#是面向?qū)ο蟮恼Z言,類的關鍵詞是class,通俗來說,類是一個比較抽象的內(nèi)容,一個項目可以包含多個類。在新建項目時,默認生成一個解決方案,一個解決方案里默認包含一個項目,一個項目里默認包含一個類。若想在某個項目下創(chuàng)建多個類,則需使用下述所示方法,具體步驟如下:(1)若想在某一項目下創(chuàng)建多個類,則可在解決方案資源管理器中單擊鼠標右鍵,依次選擇“該項目名”→“添加”→“新建類”,進入如圖1.19所示的界面。(2)在圖1.19界面中選擇“類”,此時就可在“名稱”欄里修改類的名稱,也可使用默認名稱,需要注意的是類的名稱不可以出現(xiàn)中文字段。隨后點擊“添加”按鈕即可進入如圖1.20所示界面,新建類操作完成。5.運行類的結果在VS2019中,當類定義完成后,有兩種方法可以運行類。一種是點擊工具欄中的“啟動”按鈕,另一種是采用快捷鍵。具體方法如下:【方法一】點擊如圖1.21所示界面框選區(qū)域中的
按鈕,可運行程序。圖1.21中代碼的運行結果如圖1.22所示。【方法二】采用快捷鍵“Ctrl+F5”也可直接運行程序,運行結果如圖1.22所示。6.運行不同類里的兩個Main方法若如圖1.23所示,在Program.cs文件中同時寫兩個類,每個類中都包含一個Main方法,直接運行時,則會有一個Main方法被標紅,并出現(xiàn)如圖1.24所示錯誤提示。針對這種情況,具體解決方法如下:(1)在解決方案資源管理器中單擊鼠標右鍵,依次選擇“當前項目”→“屬性”→“應用程序”后,出現(xiàn)如圖1.25所示界面。(2)在“啟動對象”一項里將啟動對象修改為其中一個類,如圖1.26所示,此時剛才出現(xiàn)的標紅已消失,代表項目可正常運行。(3)重新回到Program.cs文件里運行項目,即可成功運行,出現(xiàn)如圖1.27所示界面。7.VS2019中常用的操作或快捷鍵在VS2019中,字體大小、界面顏色、顯示或隱藏行號等各類編碼習慣,都可由使用者自行設置。只需要在界面上方工具欄中依次點擊“工具”→“選項”→“選項對話框”,即可進行設置。VS2019中也支持多種快捷鍵的使用,可以有效地提高代碼編寫效率,常用的快捷鍵有8個,如表1.1所示。1.2.2第一個C#程序1.第一個C#程序(1)創(chuàng)建新項目。(2)在Program.cs文件中輸入如下代碼:(3)編譯并運行該項目。2.代碼解析1)using導入的命名空間在VS2019中,第一行“usingSystem”的內(nèi)容為創(chuàng)建控制臺應用程序時自動生成的。導入命名空間的方式可使用using。注意:(1)在一個類中可以有多個using語句;(2)using語句一定要放在程序的最上面;(3)using語句后面加分號表示該語句結束。第二行“namespace”后面的內(nèi)容是本項目的命名空間,默認與項目名稱相同。在VS2019中,此行內(nèi)容也是系統(tǒng)自動生成的。在創(chuàng)建新項目時,系統(tǒng)會自動生成一個包含Main方法的Program類。可以使用class關鍵字定義最簡單的類?;菊Z法如下:類名的命名規(guī)范:類名和創(chuàng)建的.cs文件需盡量保持一致,類的內(nèi)容應該以“{”開頭,以“}”結尾,類中的內(nèi)容應該寫在開始大括號和結束大括號中間的任意區(qū)域?!癈onsole.WriteLine(****);”為C#的控制臺打印語句,在使用這條語句之前,要導入Console類,Console類所在的包為“usingSystem”。打印語句的含義是使用系統(tǒng)提供好的Console類中的WriteLine()方法實現(xiàn)打印,需要打印的內(nèi)容放在小括號中即可,可以打印數(shù)字、漢字、字母等。2)語句關于C#的語句編寫,需要注意以下幾點:(1)語句要寫在方法中。(2)每條語句默認以分號結尾。(3)語句中涉及的所有標點符號,都應該使用英文狀態(tài)下符號。(4)一個方法中可以寫多條語句,也可以不寫語句。3)注釋在程序編寫過程中,可以為程序添加一些解釋性的文字,這些解釋性文字是不會被計算機編譯的。(1)為什么要使用注釋呢?①
養(yǎng)成良好的編程規(guī)范。②
幫助開發(fā)者更好地理解程序。③
可以增強代碼的可讀性。④
在編碼過程中,不想讓某一條語句或多條語句參與程序運行。(2)什么時候使用注釋?①
編碼過程中。②
學習過程中。(3)注釋的編寫格式分為哪幾類?①
單行注釋:一般是為一些語句添加單行注釋時使用。單行注釋符為//。②
多行注釋:程序中有多行語句不參與運行時,可以為其添加多行注釋。多行注釋符為/*…*/。③
文檔注釋:類、方法或?qū)傩砸话闾砑游臋n注釋。文檔注釋符為///。1.3C#中的數(shù)據(jù)類型C#中的數(shù)據(jù)類型可分為值類型、引用類型和指針類型三大類。值類型包括簡單類型、結構類型和枚舉類型等。引用類型包括類類型、接口類型、委托類型和數(shù)組類型等。指針類型則只能使用在安全模式中。各數(shù)據(jù)類型的關系如圖1.28所示。1.3.1值類型C#中的值類型主要包括簡單類型、枚舉類型和結構類型。其中,簡單類型包含14種簡單的基本值類型,具體關系如圖1.29所示。1.整數(shù)類型byte:無符號8位整數(shù),取值范圍是0~255(十進制),即0~28-1。sbyte:有符號8位整數(shù),取值范圍是-128~127(十進制),即-27~27-1。short:有符號16位整數(shù),取值范圍是-32768~32767(十進制),即-215~215-1。ushort:無符號16位整數(shù),取值范圍是0~65535(十進制),即0~216-1。int:有符號32位整數(shù),取值范圍是-2147483648~2147483647(十進制),即-231~231-1。uint:無符號32位整數(shù),取值范圍是0~4294967295(十進制),即0~232-1。long:有符號64位整數(shù),取值范圍是-9223372036854775808~9223372036854775807(十進制),即-263~263-1。ulong:無符號64位整數(shù),取值范圍是0~18446744073709551615(十進制),即0~264-1。C#中整數(shù)的默認類型為int。一般情況下,為了使程序的時間和空間的復雜度盡可能低,應根據(jù)程序的需要選擇合適的數(shù)據(jù)類型,例如存儲240,如果使用int就會出問題,此時就需要使用long。2.浮點數(shù)類型float:單精度,內(nèi)存中占4個字節(jié),取值范圍為±1.5×10-45~3.4×1038,精度為7位有效數(shù)字;double:雙精度,內(nèi)存中占8個字節(jié),取值范圍為±5.0×10-324~1.7×10308,精度為15~16位有效數(shù)字。decimal:高精度,內(nèi)存中占16個字節(jié),取值范圍為±1.0×10-28~7.9×1028,精度為28~29位有效數(shù)字。單精度、雙精度和高精度的區(qū)別在于對小數(shù)位的處理上有所不同,decimal的精度比double高,但數(shù)值范圍比double小,這是因為它的小數(shù)位可以很多,但是整體數(shù)值范圍比double小,一般需要高精度小數(shù)運算或者金融財務貨幣計算的時候,才會選擇decimal類型來存儲變量值以及運算結果。3.布爾類型布爾類型(bool)是用來表示“真”或“假”的邏輯數(shù)據(jù)類型,在內(nèi)存中僅占用一個字節(jié)。布爾類型變量的取值只有兩種:true(代表“真”)和false(代表“假”)。注意:true的值不能被任何非0值所替代。在C#?中,bool類型的示例代碼如下:4.字符類型(1)char:16位Unicode字符,取值范圍為U?+?0000~U?+?ffff。字符類型只能表示任意的單個字符,單個字符可以是漢字、字母、數(shù)字、符號、空格中的任一種。在C#?中,字符常量是用單引號括起來的一個字符'。在C#?中,定義一個字符類型的示例代碼如下:(2)string:字符串類型,可以給變量分配任何字符串值。在C#?中,字符串類型的值是用引號或者@引號括起來的一串字符。示例代碼如下:值得注意的是,在C#?中,除了字符常量外,還有轉(zhuǎn)義字符。轉(zhuǎn)義字符是指以“\”開頭的字符序列,若在該字符串之前加上@,轉(zhuǎn)義字符(\)則會被認為是普通字符。示例代碼如下:1.3.2數(shù)據(jù)類型轉(zhuǎn)換在C#?中,數(shù)據(jù)類型的轉(zhuǎn)換分為兩種:一種是自動類型轉(zhuǎn)換,即自動轉(zhuǎn)型;另一種是強制類型轉(zhuǎn)換,即強制轉(zhuǎn)型。在數(shù)據(jù)類型轉(zhuǎn)換中,小數(shù)的級別高于整數(shù)。按從小到大的順序,整數(shù)依次為byte、short、int、long;小數(shù)依次為float、double。注意:一般int與float、double進行轉(zhuǎn)換。
1.自動轉(zhuǎn)型將一個范圍小的數(shù)據(jù)放到一個范圍大的數(shù)據(jù)類型中,會自動提升小數(shù)據(jù)的類型。示例代碼如下:2.強制轉(zhuǎn)型將一個范圍大的數(shù)據(jù)放到一個范圍小的數(shù)據(jù)類型中,若使用如下代碼,則程序會報錯。示例代碼如下:如果一定要這樣做,則需要使用強制類型語法。例如1.23默認是double類型,要將其轉(zhuǎn)成float類型,示例代碼如下:提示:(1)正常使用數(shù)據(jù)時,數(shù)據(jù)類型需保持一致,如果出現(xiàn)不一致,則需要轉(zhuǎn)型,轉(zhuǎn)型時推薦使用自動轉(zhuǎn)型,如果一定要使用強制轉(zhuǎn)型,則需要注意“強制轉(zhuǎn)型有風險,使用時要謹慎”。因為有可能出現(xiàn)運算結果和實際結果不一致的情況,這是因為數(shù)據(jù)溢出造成的。(2)在C#?中,各類型之間數(shù)據(jù)加減時的規(guī)則如下:①byte+byte?=int。②byte+int=int。③short+short=int。④short+int=int。1.4變?量?與?常?量1.4.1變量變量是內(nèi)存中的一塊區(qū)域,是用來存儲程序中各種各樣類型的數(shù)據(jù)。一個變量指的是一個供程序操作的存儲區(qū)的名字。在C#?中,每個變量都有一個特定的類型,類型決定了變量的內(nèi)存大小和布局。該類型范圍內(nèi)的值可以被存儲在變量的內(nèi)存中,并可對變量進行一系列操作。1.變量的聲明與初始化1)變量聲明變量聲明的基本語法如下:其中,訪問修飾符和變量修飾符可以被省略,變量的基本數(shù)據(jù)類型有14種,主要包括byte、int、bool、float等。2)變量初始化變量初始化的基本語法如下:變量的初始化,就是為變量第一次進行賦值的操作。變量聲明及初始化的示例代碼如下:2.變量的特點(1)一個變量可以被多次賦值,在內(nèi)存中存儲的值是最后一次賦值操作所賦的值。(2)變量在使用之前一定要先賦值,否則不能使用(注:指的是在方法中定義的變量)。(3)在同一個代碼塊中,變量名不能重名。(4)一個代碼塊指的是一對大括號及其中內(nèi)容的部分。(5)變量進行賦值時,一般賦值的值類型應該和變量的類型是一致的。(6)當同時定義多個同一類型的變量,可以在一行上定義這些變量并賦值,也可以在一行先定義,再賦值。定義變量的語法如下:例如:3.變量名的命名規(guī)則(1)變量名中只能包含大小寫英文字母、數(shù)字、下畫線、@等字符。(2)變量名不能以數(shù)字開頭,可以以大小寫字母,下畫線等開頭。(3)變量名不能與C#?中的關鍵字同名,但C#?允許在關鍵字前加上前綴@作為變量的名字,如@int則是合法的變量名。(4)如果變量名是由一個單詞組成的,那么單詞的所有字母需全部小寫;如果變量名是由多個單詞組合而成的,那么可以使用駱駝式命名法(Camel-Case),即第一個單詞的首字母小寫,其余單詞的首字母大寫的方式。(5)變量名一般應做到“見名知意”。1.4.2常量常量是一個固定值,在程序執(zhí)行期間不會發(fā)生改變,它們的值定義后不能被修改。常量可以是任何的基本數(shù)據(jù)類型,在代碼中的任何位置都可以使用常量來代替實際值。1.常量的聲明常量在聲明時需要包含常量的名稱和常量的值。常量聲明的基本語法如下:其中,訪問修飾符可以被省略,常用的修飾符可以是new、public、internal、private等。常量聲明的方法如下:為了增強代碼的可讀性,會使用一行聲明一個、運用多行聲明多個變量的方法。2.常量的特點(1)常量是一個固定值,在程序執(zhí)行期間不會被改變。(2)常量在聲明的同時必須進行賦值。(3)在同一個代碼塊中,常量名不能重名。(4)當定義多個同一類型的常量時,可以在一行上聲明這些常量并同時進行賦值;也可以一行聲明一個,多寫幾行。3.常量名的命名規(guī)則(1)常量名中只能包含大小寫英文字母、數(shù)字、下畫線、@等字符。(2)常量名不能以數(shù)字開頭,可以以大小寫字母,下畫線等開頭。(3)常量名不能與C#?中的關鍵字同名,但C#允許在關鍵字前加上前綴@作為常量的名字,如?@int則是合法的常量名。(4)如果常量名是由一個單詞組成的,那么單詞的所有字母需全部小寫;如果常量名是由多個單詞組合而成的,那么可以使用駱駝式命名法(Camel-Case),即第一個單詞的首字母小寫,其余單詞的首字母大寫的方式。(5)常量名一般應做到“見名知意”。1.5運算符和表達式1.5.1算術運算符C#?中支持的算術運算符共有7種,分別為?+、-、*、/、%、++、-?-。1.+?和?-?運算符+:把兩個操作數(shù)相加。-:把兩個操作數(shù)相減。2.*?和?/?運算符*?:把兩個操作數(shù)相乘。/?:把兩個操作數(shù)相除。3.%運算符%:取模運算符,即取兩數(shù)相除之后的余數(shù)。4.++?和?--?運算符++:自增運算符,在原來值的基礎之上加1。--?:自減運算符,在原來值的基礎之上減1。++?或?--?只能用在變量前面或后面,且變量一定是已經(jīng)賦值的變量。1.5.2關系運算符在C#?中,關系運算符的運算結果是bool類型的,即結果為true或false。C#?中支持的關系運算符共有6種,分別為?>、<、==、!=、>=、<=。一般地,可以定義一個bool類型的變量來接收比較結果。例如:1.>?和?<?運算符>?:檢查左操作數(shù)的值是否大于右操作數(shù)的值,如果是,則結果為true,否則結果為false;<?:檢查左操作數(shù)的值是否小于右操作數(shù)的值,如果是,則結果為true,否則結果為false。2.>=?和?<=?運算符>=?:檢查左操作數(shù)的值是否大于或等于右操作數(shù)的值,如果是,則結果為true,否則結果為false。<=?:檢查左操作數(shù)的值是否小于或等于右操作數(shù)的值,如果是,則結果為true,否則結果為false。3.==?和?!=?運算符==?:檢查左右兩個操作數(shù)的值是否相等,如果相等,則結果為true,否則結果為false。!=?:檢查左右兩個操作數(shù)的值是否相等,如果不相等,則結果為true,否則結果為false。(1)==?是關系運算符,用來比較兩個值是否相等。相等返回true,否則返回false。(2)=?是基礎的賦值運算符。例如“intnumber=10;”是將等號右側的10賦值給等號左側的變量number。1.5.3位運算符位運算符作用于位,即將操作數(shù)轉(zhuǎn)化為二進制后,逐位執(zhí)行操作。C#中支持的位運算符共有6種,分別為&、|、^、~、<<、>>。在了解位運算符之前,需掌握如表1.2所示的真值表。1.&?和?|?運算符&:二進制AND運算符,全真為真,否則為假,也就是說若兩個操作數(shù)p和q皆為1,則p&q為1,否則為0,如表1.2所示。|?:二進制OR運算符,全假為假,否則為真,也就是說若兩個操作數(shù)p和q皆為0,則p?|?q為0,否則為1,如表1.2所示。2.^?運算符^:異或運算符,相同為0,不同為1,也就是說若兩個操作數(shù)p和q相同(同為0或同為1皆可),則p^q為0,否則為1。3.~?運算符~?:按位取反運算符,把二進制進行一個變化,1變成0,0變成1。4.<<?和?>>?運算符<<:二進制左移運算符,左移就是將運算符左邊操作數(shù)的二進制各位全部向左移動運算符右邊指定的移動位數(shù),低位補0。其實,移幾位就相當于乘以2的幾次方。>>:二進制右移運算符,右移就是將運算符左邊操作數(shù)的二進制各位全部向右移動運算符右邊指定的移動位數(shù),低位丟棄。其實,移幾位就相當于除以2的幾次方。1.5.4賦值運算符C#?中支持的賦值運算符共有11種,分別為?=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=,其詳細介紹如表1.3所示。其中,常用的賦值運算符為?=、+=、-=、*=、/=、%=。1.5.5邏輯運算符邏輯運算符的運算結果通常放在一個bool類型的變量中,使用邏輯運算符所得的結果是true或false。C#?中支持的邏輯運算符共有3種,分別為?&&、||、!。1.&&?運算符&&:邏輯與運算符,如果兩個操作數(shù)都為真時,則結果為“真”,即true,否則結果為“假”,即false。2.||?運算符||:邏輯或運算符,如果兩個操作數(shù)至少有一個為真,則結果為“真”,即true,否則結果為“假”,即false。3.!?運算符!:邏輯非運算符,用來逆轉(zhuǎn)操作數(shù)的邏輯狀態(tài),如果條件為真則邏輯非運算符將其結果變?yōu)榧佟_壿嬤\算符中的“邏輯與”和“邏輯或”存在一種短路運算,關于短路計算,需要掌握以下幾點:(1)“邏輯與”連接多個式子時,會從左往右依次執(zhí)行每一個式子,在這個過程中,只要有一個為假,后面的其他式子便不會再執(zhí)行,整個式子將返回false。(2)“邏輯或”連接多個式子時,會從左往右依次執(zhí)行每一個式子,在這個過程中,只要有一個為真,后面的其他式子便不會再執(zhí)行,整個式子將返回true。1.5.6三元運算符三元運算符又稱為條件運算符,是if語句的一種簡化形式,它的基本語法如下:操作數(shù)可以為變量或表達式。操作數(shù)1相當于if語句中的條件,操作數(shù)2相當于if語句中滿足條件后應執(zhí)行的語句,操作數(shù)3相當于if語句中不滿足條件應執(zhí)行的語句。它表示的含義是:如果操作數(shù)1為真,則輸出操作數(shù)2;如果操作數(shù)1為假,則輸出操作數(shù)3。1.6C#?控?制?結?構1.6.1if分支結構條件語句就是按照條件進行判斷,并根據(jù)判斷結果選擇執(zhí)行哪一個分支的語句。其中if分支結構主要包括單分支結構、雙分支結構和多分支結構三種。1.單分支結構的if語句1)基本語法2)執(zhí)行流程(1)如果條件成立,則執(zhí)行大括號中的代碼塊。(2)如果條件不成立,則不執(zhí)行代碼塊內(nèi)的內(nèi)容,繼續(xù)執(zhí)行結尾大括號下面的其他語句。2.雙分支結構的if…else語句1)基本語法2)執(zhí)行流程(1)如果條件成立,則執(zhí)行代碼塊1的語句,執(zhí)行完代碼塊1內(nèi)容后,代碼塊2的語句一定不會執(zhí)行。(2)如果條件不成立,則執(zhí)行代碼塊2的語句,而代碼塊1的語句就不再執(zhí)行。綜上可知,if…else表示的是互斥關系,即執(zhí)行if的內(nèi)容,一定不會再執(zhí)行else的內(nèi)容。另外,if…else語句也可用三元運算符來表示,即“條件?第1處結果:第2處結果?!币话闱闆r下,代碼塊要用大括號括起來。如果if或else的代碼塊中只有一條語句,則大括號是可以省略的,但不推薦省略。3.多分支結構語句1)基本語法(1)if…elseif…else語句。(2)if嵌套。2)執(zhí)行流程if…elseif…else表示對同一內(nèi)容進行的多重判斷。具體流程為:先判斷是否滿足條件1,如果滿足,執(zhí)行條件1所對應代碼塊,執(zhí)行完后,不會再執(zhí)行其他的elseif;如果條件1不成立,繼續(xù)往下查看是否滿足條件2,如果條件2滿足,執(zhí)行條件2對應的代碼塊,不滿足繼續(xù)判斷其他代碼塊。一般情況下會在最后加一個else,表示所有的條件都不滿足時才執(zhí)行else,但這不是必需的,如果不在最后加else,代碼也是可執(zhí)行的。1.6.2switch分支結構if語句只能測試單個條件,如果需要測試多個條件,則要不停使用if…else,這種分支結構所描寫的代碼復雜、冗余度高。而switch語句允許測試一個變量等于多個值時的情況。switch語句的基本語法如下:使用switch語句時必須遵循以下規(guī)則:(1)switch中的case可以有多條,每一條最后加break;當匹配了一條case之后,其他case不執(zhí)行,遇到break跳出switch結構,繼續(xù)執(zhí)行大括號下面的語句。(2)switch后面小括號內(nèi)必須是一個整型或枚舉類型。即float、double、byte、short、int、long、sbyte、ushort、uint、ulong這些類型。(3)default語句只能有一條,當所有的case都不滿足時,執(zhí)行default。default一般是放在最后一個case下面,也可以放在其他位置,這不影響其意義。default中的語句,最后才執(zhí)行。(4)一般情況下,switch…case結構中的每個case后面都需要加break語句,但是當需要多個case連起來寫,且每個case里面沒有任何內(nèi)容時,case可省略,語句會從上往下執(zhí)行,直到遇見有break的case,才會跳出switch結構。1.6.3C#?中的循環(huán)結構通常情況下,程序中的語句是順序執(zhí)行的,即第一條語句先執(zhí)行,接著執(zhí)行第二條語句,依次類推。但有時候可能需要多次執(zhí)行同一代碼塊,這時就可以考慮使用循環(huán)結構來執(zhí)行這些語句,這樣做可以減少代碼量,避免重復輸入相同的代碼行,而且還可以增加代碼的可讀性。在C#?中,常用的循環(huán)結構有三種,分別為while循環(huán)、dowhile循環(huán)和for循環(huán)。任何一種循環(huán)結構都包含4個要素:·初始值:通常是對變量的定義?!ぱh(huán)條件:反復執(zhí)行循環(huán)體內(nèi)容所滿足的條件?!ぱh(huán)體:反復做的一件事情。·迭代操作:改變初始值(i++,i--)。1.while循環(huán)while循環(huán)的基本語法如下:語法說明:當條件成立時,反復執(zhí)行循環(huán)體的內(nèi)容(即大括號括起來的內(nèi)容),直到條件不成立時,不再執(zhí)行循環(huán)體內(nèi)容,while循環(huán)結束后,繼續(xù)執(zhí)行大括號下面的語句。使用while循環(huán)時必須遵循以下規(guī)則:(1)一般情況下,小括號內(nèi)是一個條件表達式,除此之外,小括號中也可以是一個布爾值(true或false)。(2)while循環(huán)表示“當……時候,做……事情”,故while循環(huán)有可能一次也不執(zhí)行,那么究竟能不能執(zhí)行,執(zhí)行幾次,這完全取決于條件。(3)while循環(huán)由語法可分析出,它適合不明確循環(huán)次數(shù),但已知循環(huán)執(zhí)行條件的場景,在這種情況下,一般使用while循環(huán)完成。2.do…while循環(huán)do…while循環(huán)的基本語法如下:語法說明(和while循環(huán)的區(qū)別):do…while循環(huán)大部分和while類似,唯一的區(qū)別是do…while循環(huán)一開始先執(zhí)行一次循環(huán)體的內(nèi)容,執(zhí)行完再去判斷while后面的條件,如果條件成立,會繼續(xù)執(zhí)行循環(huán)體的內(nèi)容;如果條件不成立,則跳出循環(huán),繼續(xù)執(zhí)行do…while循環(huán)后面的語句。也就是說,do…while循環(huán)會至少確保執(zhí)行一次循環(huán)體。使用do…while循環(huán)時必須遵循以下規(guī)則:(1)do…while循環(huán)中,while后面的小括號內(nèi)是條件,在循環(huán)體首次被執(zhí)行后,只有當條件成立時,才會繼續(xù)執(zhí)行循環(huán)體的內(nèi)容。(2)在do…while循環(huán)的結束句while()后面要跟一個分號,否則會出現(xiàn)語法錯誤。(3)do…while循環(huán)的初始值只會執(zhí)行一次,反復執(zhí)行的部分是循環(huán)條件、循環(huán)體和迭代操作。3.for/foreach循環(huán)for循環(huán)的基本語法如下:for循環(huán)中語句的執(zhí)行過程如下:(1)先執(zhí)行表達式1,為變量賦值。(2)再執(zhí)行表達式2,即循環(huán)條件。如果條件成立,則執(zhí)行一次循環(huán)體,如果條件不成立,則跳出for循環(huán),繼續(xù)執(zhí)行for循環(huán)之后的下一條語句。(3)每次執(zhí)行完循環(huán)體后,計算表達式3,對控制變量進行增量或減量操作,再重復執(zhí)行步驟(2)操作。for循環(huán)執(zhí)行的流程圖,如圖1.32所示。foreach循環(huán)的基本語法如下:foreach循環(huán)中語句的執(zhí)行過程如下:(1)判斷集合或數(shù)組中是否存在元素,若存在,則執(zhí)行步驟(2),否則結束循環(huán),執(zhí)行for循環(huán)之后的下一條語句。(2)用集合或數(shù)組中的第一個元素初始化局部變量,執(zhí)行循環(huán)體。(3)判斷集合或數(shù)組中是否還存在未被判斷過的元素,若存在,則繼續(xù)使用未被判斷過的元素中的第一個初始化局部變量,執(zhí)行循環(huán)體,繼續(xù)步驟(3);否則結束循環(huán),執(zhí)行for循環(huán)之后的下一條語句。4.中止循環(huán)1)break在C#?中,break語句的主要應用場景有兩種:(1)while、do…while、for循環(huán)。當break語句出現(xiàn)在一個循環(huán)體中,程序執(zhí)行時遇到break便會立即終止循環(huán),跳出循環(huán)體,繼續(xù)執(zhí)行循環(huán)外的下一條語句。(2)switch…case分支結構。在該結構中,break可以用于終止switch中的一個case。2)continuecontinue語句與break語句有些相像,但兩者又有不同。continue是用于結束本次循環(huán),繼續(xù)執(zhí)行下一次循環(huán),而并非是像break那樣,直接結束整個循環(huán)、繼續(xù)執(zhí)行循環(huán)外的下一條語句。continue語句的含義是當遇到continue時,continue下面的語句不再執(zhí)行,會執(zhí)行下一次循環(huán)。3)break和continue的異同點(1)相同點:都是用于中止循環(huán)。(2)不同點:循環(huán)中遇到break,整個循環(huán)會被立即中止,跳出循環(huán)體,繼續(xù)執(zhí)行循環(huán)體外的其他語句。循環(huán)中遇到continue,只是表示一輪循環(huán)的結束,它還會繼續(xù)判斷循環(huán)的執(zhí)行條件,若符合執(zhí)行條件,則會繼續(xù)下一輪循環(huán),只是continue下面的其他語句當次不再執(zhí)行。4)break和continue的使用場景(1)break一般是與總和或總乘積變量做比較。(2)continue更多的是對一組數(shù)據(jù)進行判斷,其中某一個或幾個不滿足條件時,做其他處理后,繼續(xù)遍歷剩下的數(shù)據(jù)。5.循環(huán)的使用場景(1)如果遇到至少需要執(zhí)行一次的需求或功能,選擇do…while。(2)如果需要完成的功能,可以理解為“當滿足某條件時,需要做某個事情”,選擇while循環(huán)完成,也可以理解為不能明確知道循環(huán)次數(shù)時,只能使用while循環(huán)。(3)使用for循環(huán)完成的功能,大部分可使用while循環(huán)替代,但是while循環(huán)完成的功能,for循環(huán)不一定能完成。for循環(huán)通常情況下更適合應用于一組有規(guī)律的數(shù)據(jù)操作,例如求和、求階乘、求指定范圍內(nèi)的數(shù)據(jù)等。1.7數(shù)組1.7.1數(shù)組簡介數(shù)組是一組類型和名稱完全相同的變量所構成的集合,它在內(nèi)存中需要占據(jù)一塊連續(xù)的存儲區(qū)域,被占據(jù)的這塊區(qū)域可以存儲多個同一類型的數(shù)據(jù),這些數(shù)據(jù)都擁有相同的變量名,可采用一個統(tǒng)一的數(shù)組名和不同的下標來確定數(shù)組中唯一的元素。定義數(shù)組的基本語法如下:[]中可以寫數(shù)組的大小或容量,也可以省略不寫。System.Array類提供了創(chuàng)建、操作、搜索排序數(shù)組等靜態(tài)方法供程序調(diào)用,它是所有數(shù)據(jù)類型的抽象基類。Array類常用的方法如下:(1)Sort()可對一維數(shù)組中的元素進行排序。(2)Copy()可實現(xiàn)數(shù)組的合并和拆分。(3)Clear()可將Array中的元素值清除。(4)Reverse()可逆轉(zhuǎn)整個一維數(shù)組中的元素順序。C#?的數(shù)組初始化方法有三種,下面以存儲班級四位學生的年齡數(shù)據(jù)ages為例,進行一一介紹?!痉椒ㄒ弧炕菊Z法如下:示例代碼如下:這種數(shù)組初始化方式只能在方法里賦值,若在方法外賦值,則系統(tǒng)會報錯。【方法二】基本語法如下:示例代碼如下:這種數(shù)組初始化方式可以寫在方法里,也可以寫在方法外。使用場景:明確已知數(shù)組中存儲元素的個數(shù),以及每個元素的值。【方法三】基本語法如下:示例代碼如下:這種數(shù)組初始化方式只能在方法里賦值,若在方法外賦值,則系統(tǒng)會報錯。
除了常見的一維數(shù)組,還有二維數(shù)組,二維數(shù)組的初始化主要包括靜態(tài)初始化及動態(tài)初始化兩種方式。表示二維數(shù)組中的某一個元素可采用“數(shù)組名[行的索引值,列的索引值]”的方式實現(xiàn)。數(shù)組元素:數(shù)組元素是組成數(shù)組的基本單元。數(shù)組元素也是變量的一種,其標識方法為數(shù)組名后跟一個下標。下標是指元素在數(shù)組中的順序號。數(shù)組元素通常也稱為下標變量,必須在使用下標變量之前定義數(shù)組。數(shù)組長度:內(nèi)部存儲元素的數(shù)量。通過“數(shù)組名.Length”的方式可以獲取數(shù)組的長度。數(shù)組中元素的值:數(shù)組中指定位置的元素值,即數(shù)組名在內(nèi)存中對應區(qū)域的下標標識所對應位置元素的值。數(shù)組的基本語法如下:注:下標標識是一個整數(shù),從0開始。1.7.2數(shù)組的遍歷在C#?中,數(shù)組的遍歷至少有4種方法?!痉椒ㄒ弧?/p>
直接利用數(shù)組元素的下標。若想遍歷數(shù)組ages[0],…,ages[i]中的第一個數(shù)組,示例代碼如下:如果想查看結果可以將其放到打印語句中,但是這種方法重載代碼太多、太煩瑣?!痉椒ǘ?/p>
使用標準的for循環(huán)。示例代碼如下:【方法三】
使用while或dowhile循環(huán)。這兩種循環(huán)不如for循環(huán)結構簡單。使用while循環(huán)實現(xiàn)數(shù)組遍歷的示例代碼如下:【方法四】foreach循環(huán)。示例代碼如下:數(shù)組的遍歷常應用于排序中,例如:冒泡排序、選擇排序等,冒泡排序及選擇排序的核心代碼如下所示。(1)冒泡排序核心代碼(最大值在第一輪的時候冒到最后)。示例代碼如下:(2)選擇排序核心代碼。首先在未排序序列中找到最小元素,并存放到排序序列的起始位置,然后從剩余未排序元素中繼續(xù)尋找最小元素,放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。示例代碼如下:1.8方法1.8.1方法的定義一個方法就是把一些相關的語句組織在一起,用來執(zhí)行一個任務的語句塊。方法的主要作用是將代碼進行重用的一種機制,從而避免出現(xiàn)過多的冗余代碼,以方便后期維護。方法在類或結構中聲明,聲明時需要指定訪問級別、返回值、方法名稱以及參數(shù)。方法參數(shù)放在括號中,并用逗號隔開。空括號表示該方法不需要參數(shù)。1.基本語法方法的基本語法如下:2.方法名稱在C#?中,方法名稱的命名多采用帕斯卡(Pascal)命名法。帕斯卡命名法與駱駝式命名法稍有區(qū)別,帕斯卡命名法要求名稱中單詞的首字母大寫。3.方法的返回值方法的返回值指方法在執(zhí)行完畢后需要返回給調(diào)用者的內(nèi)容。當“返回值類型”為void時,該方法不需要有任何返回值,除此之外,“返回值類型”還可以使用任意類型,包括但不限于int、double等,具體使用哪種類型,需根據(jù)方法所實現(xiàn)的功能來定義。需要注意的是,方法中設置的return值必須與返回值類型一致,并且所有的正常執(zhí)行分支都必須具有返回值,否則會報錯。4.參數(shù)列表當有多個參數(shù)時,多個參數(shù)之間使用“,”進行分隔,從而構成參數(shù)列表。參數(shù)包括形式參數(shù),又稱“形參”;實際參數(shù),又稱“實參”。具體介紹如下:(1)形式參數(shù):指定義方法時,在方法名后的小括號中所寫的參數(shù),可以寫也可以不寫。(2)實際參數(shù):指其他方法調(diào)用某些方法時,調(diào)用時在方法名后添加的有實際值的參數(shù)。1.8.2方法的調(diào)用與重載1.方法的調(diào)用方法定義以后,可以在合適的位置進行調(diào)用。其基本語法如下:同步方法調(diào)用主要有三種情形:(1)調(diào)用不帶參數(shù)的、無返回值的方法。調(diào)用時,只需要寫“方法名()”即可。(2)調(diào)用帶有參數(shù)的、無返回值的方法。調(diào)用時,只需要在小括號內(nèi)依次填寫對應參數(shù)即可。(3)調(diào)用帶有參數(shù)的、有返回值的方法。調(diào)用時,只需要在小括號內(nèi)依次填寫對應參數(shù)即可。需要注意的是,帶返回值的方法必須使用“return特定類型的返回值”。在方法定義時,需要考慮被定義的方法是否需要給調(diào)用者返回結果。如果不需要,定義方法時,返回值類型應該寫成void;如果需要,返回值類型不能寫成void。這需要視情況而定,有時也可以是int、float、double等。2.方法的重載方法重載是一種使用機制,可在編碼中解決。如果需要完成相同的功能,但需要的參數(shù)個數(shù)或類型不一樣,這時就需要使用方法重載了。能夠構成方法重載的條件如下:(1)必須是一個類的一組方法(方法至少有2個)。(2)這組方法的特點必須滿足如下條件:方法名完全相同,但是方法的形式參數(shù)個數(shù)或參數(shù)類型不相同。當調(diào)用時,編譯器會根據(jù)給定的實際數(shù)據(jù)進行自動匹配,找到最合適的方法去執(zhí)行。匹配時,會自動向上匹配。
1.9面向?qū)ο缶幊?.9.1類、對象和結構1.類類是組成程序最基本的單元,能夠以class為關鍵字來創(chuàng)建一個類。程序中的類,可以認為它是一種模板,是不存在的東西,但將來可以根據(jù)類這個模板,構建很多具體的真正存在的實物。而這個模板的作用,就是規(guī)范這個類應該包含的特征和行為。創(chuàng)建類的基本語法如下:注:(1)類名一般是具體的名詞,命名使用帕斯卡命名法。(2)類定義時,需要使用一組大括號。
(3)可在class前添加訪問修飾符,如public、private、protected、internal等,也可以不加。2.對象對象就是根據(jù)類這個模板產(chǎn)生的具體實物。符合這個模板的實物可以有多個,所以在程序中可以創(chuàng)建多個對象。使用new關鍵字可創(chuàng)建多個對象,創(chuàng)建幾次就會產(chǎn)生幾個對象。使用類創(chuàng)建出來的對象,都具備模板中所定義的規(guī)范(特征和行為),對象被創(chuàng)建出來之后,會被存儲在堆棧中。創(chuàng)建對象的基本語法如下:一般情況下,類單獨寫在一個.cs文件中,如果要根據(jù)類產(chǎn)生對象,則通常會選擇創(chuàng)建一個新的類。3.結構1)結構的基本語法2)結構中的內(nèi)容類中可以放的內(nèi)容,大部分都可以放在結構中。具體如下:(1)字段。(2)普通方法。(3)含有參數(shù)的構造方法。(4)不能放無參數(shù)的構造方法。3)結構的特點(結構和類的區(qū)別)(1)結構是一種值類型的數(shù)據(jù),創(chuàng)建一個結構對象時,不必使用new來創(chuàng)建,一般也不會這樣用,但是如果使用也不會報錯。(2)結構屬于值類型,類屬于引用類型。(3)當描述的對象是比較復雜或字段較多時,就要使用類。當描述一種包含多個值的對象,但它是一種輕量級的數(shù)據(jù)類型時,就要使用結構。1.9.2類中的字段和方法為了更好地描述模板,通常需要在模板類中添加一些特定的成員內(nèi)容。成員包括兩部分:(1)字段:特征,即該成員有什么。(2)方法:行為,即該成員能做什么。當對象使用new關鍵字被創(chuàng)建出來后,每個對象都會具備類中所定義好的一份內(nèi)容(字段和方法),而且每個字段都會有默認值。但是,如果想為對象的字段重新賦值,就需要:(1)訪問類中某些字段,訪問方法為“對象名.字段;?”。(2)當前操作的對象的某些字段賦值,訪問方法為“對象名.字段名=具體的值;”。構造方法時,應注意以下幾點:(1)構造方法的方法名和類名是完全相同的。(2)一個類可以包含多個構造方法,構造方法可以有參數(shù),也可以無參數(shù)。(3)構造方法的作用:在使用new創(chuàng)建對象時,可以為對象的字段賦值。(4)方法的調(diào)用:當使用new關鍵字創(chuàng)建對象時,編譯器會自動調(diào)用構造方法,調(diào)用何種構造方法,取決于new后面類名中的小括號里有沒有寫參數(shù)。1.9.3面向?qū)ο缶幊痰奶匦?.封裝性廣義封裝:從整個項目的設計角度出發(fā)。狹義封裝:通過訪問修飾符來控制類中成員的訪問權限(作用范圍)。1)實現(xiàn)狹義封裝時應該注意類的包含內(nèi)容(1)類中的字段(特征)、類中的方法(行為)。(2)類中的字段私有化(private),類中的方法公開化(public)。2)訪問修飾符如果創(chuàng)建了一個類,并且類中添加了字段和方法,但是字段或方法卻省略了訪問修飾符,那么省略的其實是private,也就是說,字段和方法的默認權限是private。對于類來說,如果class前面省略了訪問修飾符,那么省略的其實是internal。3)屬性語法注:(1)屬性名和字段名是對應的,值得注意的是,屬性名應該首字母大寫。(2)一個屬性中對應兩個方法,分別是get和set,通過get訪問字段的值,通過set設置字段的值。(3)利用屬性訪問或設置值的語法:(4)將具體值設置到字段上時,有一個隱含的變量value,先將具體值交給value變量,再由value變量給字段,其中,value的類型會與當前操作的字段匹配。
4)只讀屬性和只寫屬性(1)只讀屬性:只有get訪問器的屬性為只讀屬性,此屬性不定義set訪問器。(2)只寫屬性:只有set訪問器的屬性為只寫屬性,此屬性不定義get訪問器;5)常規(guī)屬性和自動屬性(1)常規(guī)屬性:需要人為具體地實現(xiàn)get訪問器或者set訪問器,一般需要有一個字段與之相對應。(2)自動屬性:無需自己再定義私有字段,系統(tǒng)會在自動屬性中自動添加一個對應的私有字段。自動屬性中的get和set必須成對出現(xiàn),不能再設置只讀或只寫一種權限,不能在set中添加業(yè)務代碼,對字段的值進行判斷的操作。字段私有化,方法公開化。一個私有化字段對應一個標準屬性(包含兩個方法get和set)。2.繼承性(1)C#?中的繼承,也就是子父類關系。(2)C#?中的繼承符號為冒號。注:子類類名的后加上冒號,表示冒號后是一個父類的類名。(3)C#?中的繼承是單層繼承。(4)C#?中的繼承具有傳遞性。C類繼承了B類,C就具備了B類的所有內(nèi)容,B類又繼承了A類,B類就具備了A類的所有內(nèi)容,而對于C來說,C類不光具備了B類的內(nèi)容,同時,隱式地具備了A類中的內(nèi)容。(5)子類繼承了父類,父類的全部內(nèi)容都會被子類繼承。但是,全部內(nèi)容中有一些比較特殊的內(nèi)容值得注意:①
父類私有的內(nèi)容:表面上看,是訪問不到,但是實際是繼承了,只是暫時訪問不到??梢酝ㄟ^反射等操作拿到相關數(shù)據(jù)。②
父類的構造方法:構造方法是不能繼承的,但是子類可以使用。3.多態(tài)性同一操作作用于不同的對象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結果,這就是多態(tài)性。多態(tài)性通過派生類覆寫基類中的虛函數(shù)型方法來實現(xiàn)。多態(tài)性分為兩種,一種是編譯時的多態(tài)性,一種是運行時的多態(tài)性。編譯時的多態(tài)性:通過重載來實現(xiàn)的。對于非虛的成員來說,系統(tǒng)在編譯時,根據(jù)傳遞的參數(shù)、返回的類型等信息決定實現(xiàn)何種操作。運行時的多態(tài)性:通過覆寫虛成員實現(xiàn)。直到系統(tǒng)運行時,才根據(jù)實際情況決定實現(xiàn)何種操作。使用“父類變量指向子類對象”的方式創(chuàng)建對象的過程稱為向上轉(zhuǎn)型。向上轉(zhuǎn)型后,對象就具備了父類型和子類型。程序會根據(jù)運行期間對象的所屬類型來決定執(zhí)行子類還是父類中的方法。如果子類重寫了,則執(zhí)行子類自己的,如果子類沒有重寫,則執(zhí)行父類的,如果父類也沒有,就會報錯。1.9.4集合集合與數(shù)組比較相似,都可以用來存儲和管理一組具有相似性質(zhì)的對象。1.ArrayListArrayList是System.Collections命名空間中的類,它代表了可被單獨索引的對象的集合,類似于數(shù)組,被稱為動態(tài)數(shù)組,它與普通數(shù)組的不同之處是可以使用索引在指定位置做添加或刪除的操作,并允許在列表中進行動態(tài)內(nèi)存分配、搜索、排序等操作。創(chuàng)建ArrayList可以使用3種重載構建函數(shù)中的某一種,具體如下:2.List<T>創(chuàng)建List集合的基本語法如下:3.<T>T數(shù)據(jù)類型可以是int、byte、short、string、bool、char等。4.泛型(1)具有類型限制,會對集合中的數(shù)據(jù)類型進行限制。(2)允許延遲編寫類或方法中的編程元素的數(shù)據(jù)類型的規(guī)范,直到實際在程序中使用它的時候,再指定該元素的數(shù)據(jù)類型的規(guī)范。(3)<T>表示泛型的寫法,T指的是一種數(shù)據(jù)類型。(4)泛型是一種編譯期的類型(運行之前會進行語法檢查),針對泛型的語法檢查主要是為了檢查類型是否匹配。5.List集合常用方法List集合和ArrayList集合一樣,提供了以下常用的方法:(1)Count():獲取List集合中符合條件的個數(shù)。(2)Add():在List集合中添加單個元素。(3)Remove():刪除第一個在List集合中出現(xiàn)的指定對象。(4)RemoveAt():根據(jù)索引刪除List集合中出現(xiàn)的對象。(5)Reverse():反轉(zhuǎn)List集合中元素的順序。(6)Contains():通過使用默認的等式比較器(EqualityComparer<T>.Default返回的值)來確定相等。(7)ToArray():將List集合轉(zhuǎn)換為對應的數(shù)組。6.Dictionary字典1)Dictionary基本語法鍵值對為2)Dictionary存儲數(shù)據(jù)的方法使用鍵值對的形式存儲。使用哈希數(shù)據(jù)結構來存儲鍵和值,既快速又高效。存放字典中的每個元素由key和value兩部分組成。其中,字典中的key值不能重復,否則會報錯;value值可以重復。集合中的所有key值,可以通過方法獲取,是一個集合。集合中的所有value值,可以通過方法獲取,是一個集合。7.集合總結(1)ArrayList集合已經(jīng)過時,基本不再使用。如果在代碼中使用,則需要手動導入命名空間usingSystem.Collections。(2)List<T>替代了ArrayList的操作。List<T>所在的命名空間為System.Collections.Generic。這樣替代的優(yōu)點是:①
提示了增刪改查的常用方法;②
允許出現(xiàn)相同值的元素。注意:使用List<T>存儲數(shù)據(jù)時,第一個集合元素下標為0,后面為1、2、3等。
(3)Dictionary<Tkey,TValue>字典集合以鍵值對的形式存儲數(shù)據(jù),所在的命名空間為System.Collections.Generic。2.1Unity基礎知識
2.2腳本文件
2.3組件
2.43D數(shù)學2.1Unity基礎知識2.1.1什么是Unity1.Unity簡介Unity是由UnityTechnologies公司開發(fā)的用于輕松創(chuàng)建諸如三維視頻游戲、建筑可視化和實時三維動畫等類型的多平臺綜合型游戲開發(fā)工具,它是一個國際領先的專業(yè)游戲引擎。Unity圖標如圖2.1所示。Unity引擎具有很大的靈活性,它使開發(fā)者能夠為20多個平臺創(chuàng)作和優(yōu)化內(nèi)容,這些平臺包括iOS、安卓、Windows、MacOS、索尼PS4、任天堂Switch、微軟XboxOne、谷歌Stadia、微軟Hololens、谷歌ARCore、蘋果ARKit、商湯SenseAR等。UnityTechnologies公司的研發(fā)團隊超過1800人,同時其跟隨合作伙伴迭代,以確保在最新的版本和平臺上提供優(yōu)化支持服務。Unity不僅提供創(chuàng)作工具,還提供運營服務來幫助創(chuàng)作者。這些解決方案包括:UnityAds廣告服務、Unity游戲云一站式聯(lián)網(wǎng)游戲服務、Vivox游戲語音服務、Multiplay海外服務器托管服務、Unity內(nèi)容分發(fā)平臺、UnityAssetStore資源商店、Unity云構建等。
Unity總部位于美國加利福尼亞州舊金山,并在丹麥、比利時、立陶宛、哥倫比亞、加拿大、中國、芬蘭、瑞典、德國、法國、日本、英國、愛爾蘭、韓國和新加坡設有辦公室。創(chuàng)作者遍布全球190個國家和地區(qū)。2.Unity實際應用(1)Unity3D在虛擬仿真教育方面的應用。虛擬現(xiàn)實技術應用于教育,這是教育技術發(fā)展的一個大的飛躍。Unity3D在虛擬仿真教育方面的應用如圖2.2所示。(2)Unity3D在軍事航空領域的應用。利用VR技術,可模擬零重力環(huán)境,以代替現(xiàn)在非標準的水平下訓練宇航員的方法。Unity3D在軍事航空領域的應用如圖2.3所示。(3)Unity3D在室內(nèi)設計方面的應用。VR技術可以讓設計者完全按照自己的構想去裝飾“虛擬”的房間,并可以任意變換自己在房間中的位置去觀察設計的效果,直到滿意為止。這樣做既節(jié)約了時間,又節(jié)省了做模型的費用。Unity3D在室內(nèi)設計方面的應用如圖2.4所示。(4)Unity3D在城市規(guī)劃方面的應用。展現(xiàn)規(guī)劃方案虛擬現(xiàn)實系統(tǒng)的沉浸感和互動性不但能夠給用戶帶來強烈、逼真的感官沖擊,獲得身臨其境的體驗,還可以通過一些數(shù)據(jù)接口,在虛擬的環(huán)境中隨時獲取項目的數(shù)據(jù)資料。Unity3D在城市規(guī)劃方面的應用如圖2.5所示。(5)Unity3D在房產(chǎn)開發(fā)方面的應用。虛擬現(xiàn)實技術是集影視廣告、動畫、多媒體、網(wǎng)絡科技于一身的最新房地產(chǎn)營銷方式,同時也在房地產(chǎn)開發(fā)的其他環(huán)節(jié)起著重要作用。Unity3D在房產(chǎn)開發(fā)方面的應用如圖2.6所示。3.Unity的特性Unity的特性是一系列輔助性的功能,在綜合編輯、跨平臺、精簡流程等很多方面非常有用。其大致可總結為以下五點:(1)Unity作為游戲引擎,具有綜合編輯功能,它能夠完成關于3D效果制作的一些最為基本的編輯過程。(2)Unity提供了精簡直接的工作流程及強大的工具集,使得游戲開發(fā)周期大幅縮短。(3)Unity編輯器可運行在Windows、Linux等多平臺,其最大的特點是通過一次開發(fā)就可以部署到時下所有主流游戲平臺。(4)Unity自帶圖形動力特性。(5)Unity的是資源導入特性,能夠?qū)崿F(xiàn)多功能操作,在完成關于Unity3D工作任務的時候,可以將一些自己希望導入的信息或者是圖片導入到Unity3D當中,以達到預期的效果。4.Unity的優(yōu)點(1)高能、低價、易用。Unity3D游戲開發(fā)引擎擁有完善的技術以及豐富的個性化功能,且易于上手,降低了對游戲開發(fā)人員的要求。(2)跨平臺。開發(fā)人員可以通過不同的平臺進行開發(fā)。在游戲開發(fā)完后即可一鍵發(fā)布到常用的主流平臺或運營商的目標平臺上。Unity3D游戲可發(fā)布的平臺包括Windows、Linux、MacOS、iOS、Android、Xbox360、PS4以及Web等??缙脚_開發(fā)可為游戲開發(fā)者節(jié)省大量時間。(3)綜合編輯。Unity3D的用戶界面具備視覺化編輯、詳細的屬性編輯器和動態(tài)游戲預覽等特性。(4)資源導入。項目可以自動導入資源,并根據(jù)資源的改動自動更新。Unity3D支持幾乎所有主流的三維格式,如3dsMax、Maya、Blender等,貼圖材質(zhì)自動轉(zhuǎn)化為U3D格式,并能和大部分相關應用程序協(xié)調(diào)工作。(5)腳本語言。Unity3D集成了MonoDeveloper編譯平臺,支持C#、JavaScript和Boo三種腳本語言,其中C#和JavaScript是游戲開發(fā)中最常用的腳本語言。(6)一鍵部署。Unity3D只需一鍵即可完成作品的多平臺開發(fā)和部署,讓開發(fā)者的作品在多平臺呈現(xiàn)。(7)聯(lián)網(wǎng)。Unity3D支持從單機應用到大型多人聯(lián)網(wǎng)游戲的開發(fā)。(8)著色器。Unity3D著色器系統(tǒng)整合了易用性、靈活性、高性能等特點。(9)地形編輯器。Unity3D內(nèi)置強大的地形編輯系統(tǒng),該編輯系統(tǒng)可使游戲開發(fā)者實現(xiàn)游戲中任何復雜的地形,支持地形創(chuàng)建和樹木與植被貼片,支持自動的地形LOD、水面特效。(10)物理特效。Unity3D內(nèi)置NVIDIA的PhysX物理引擎,游戲開發(fā)者可以用高效、逼真、生動的方式復原和模擬真實世界中的物理效果,例如碰撞檢測、彈簧效果、布料效果、重力效果等。(11)光影。Unity3D提供了具有柔和陰影,以及高度完善的烘焙效果的光影渲染系統(tǒng)。5.Unity的缺點(1)資源收費。在開發(fā)過程中,很多Unity資源以及所用到的插件都是收費的。(2)平臺限制。由于iOS平臺的一些限制,Unity很難做動態(tài)代碼的更新。程序一旦穩(wěn)定了,其需要頻繁更新代碼的機會非常少,更多的是更新配置和資源。(3)需要適應。可能有些人不熟悉Unity,從而選擇了開源的cocos2d-x。適應Unity的框架、工作方式需要一定的時間。(4)打包不方便。由于Unity中資源對應的配置有很大的重要性,所以一個Unity功能就是資源+代碼的整合,很難分出一個資源包。(5)大眾化操作需考慮。Unity很多設計都是為可視化編輯考慮的,比如2D的動畫放幾張圖片就可以搞定,但是如果每張圖片都有一定的偏移,那就需要重新實現(xiàn)幀動畫功能加載配置文件來實現(xiàn)。2.1.2Unity發(fā)展史1.Unity由來2004年,有3位年輕人在開發(fā)他們的第一款游戲失利后,決定建立一家游戲引擎公司。起初,他們的想法是要讓全世界的開發(fā)人員可以使用最少的資源來創(chuàng)建出個人喜歡的游戲。誰也不曾想到,10年以后,這個起初并不起眼的公司已經(jīng)發(fā)展成為游戲引擎公司巨頭,而他們的游戲引擎也成為世界上應用最廣泛的游戲引擎。這個公司就是UnityTechnologies,這3位年輕人分別是公司創(chuàng)始人DavidHelgason(CEO)、NicholasFrancis(CCO)和JoachimAnte(CTO),3位創(chuàng)始人的初衷也得以實現(xiàn)。2.Unity發(fā)展歷程2004年,Unity誕生于丹麥。2005年,Unity將總部設在美國舊金山,同時發(fā)布了Unity1.0版本(應用于Web項目和VR開發(fā))。2006年,Unity發(fā)布了Unity1.5版本。2007年,Unity發(fā)布了Unity2.0版本——新增了地形引擎、實時動態(tài)陰影、網(wǎng)絡多人聯(lián)機等功能。2008年,Unity引擎可以在Windows平臺開發(fā),并且支持iOS和Wii。2009年,Unity發(fā)布了Unity2.5版本——推出Windows版本,支持iOS和Wii任天堂游戲機。2010年,Unity發(fā)布了Unity3.0版本——支持Android平臺。2011年,Unity可以支持PS3和Xbox360。2012年,Unity發(fā)布了Unity4.0版本——支持Web及其他游戲平臺。2013年,Unity3D引擎覆蓋了越來越多的國家,全球用戶已超過150萬。2014年,Unity發(fā)布了Unity4.6版本,更新了屏幕自動旋轉(zhuǎn)等功能。2015年,Unity發(fā)布了Unity5.0版本。2016年,Unity發(fā)布了Unity5.4版本,專注于新的視覺功能,為開發(fā)人員提供了最新的理想實驗和原型功能模式,極大地提高了其在VR畫面展現(xiàn)上的性能。2017年,Unity2017發(fā)布成功。2018年,Unity推出了ARFoundation,它包含對ARCore的默認支持。ARCore1.3加入了訪問攝像機紋理和圖像內(nèi)在屬性的功能。同年8月,ARCore1.4發(fā)布,包括透視攝像頭自動聚焦功能,以及更快的平面檢測,并添加了對更多設備的支持。2019年,Unity2019.2發(fā)布,此版本包括ProBuilder、ShaderGraph、2D光源、2D動畫、Burst編譯器、UIElements等170多項新功能和增強功能。2020年,Unity2020.1發(fā)布,增加了許多新功能。2.1.3Unity工具中常用的視圖面板Unity3D的主界面簡潔明了,大部分的面板都可以隨意改動放置,也可以關閉掉。Unity主界面如圖2.13所示。1.Scene:場景面板場景面板是用來提供設計游戲界面的可視化面板,放在場景中的內(nèi)容都稱為游戲?qū)ο?。場景面板如圖2.14所示。1)面板中的常用快捷鍵(1)按下鼠標滾輪拖動場景,滑動滾輪縮放場景。(2)鼠標右鍵旋轉(zhuǎn)場景,點擊后,通過左右移動場景。(3)點擊右鍵,同時按下W/S/A/D/Q/E鍵可實現(xiàn)場景漫游。(4)在Scene面板選中物體后按F鍵,或在Hierarchy面板雙擊物體,可將物體設置為場景視圖的中心。(5)按住Alt鍵的同時通過鼠標左鍵圍繞某物體旋轉(zhuǎn)場景,使用鼠標右鍵縮放場景。2)變換工具變換工具如表2.1所示。3)變換切換變換切換功能如表2.2所示。4)播放控件(1)播放控件?
從左到右依次是預覽游戲、暫停游戲、逐幀播放。(2)查看游戲最終運行后的畫面。在運行模式下,任何更改都只是暫時的,退出運行后會復位。(3)整個場景的固定坐標,不隨物體旋轉(zhuǎn)而改變。(4)本地坐標是物體的自身坐標,隨旋轉(zhuǎn)而改變。2.Hierarchy:層級視圖(層次視圖)層級視圖用于顯示當前Scene場景頁面中所有的游戲?qū)ο?,層級視圖面板如圖2.15所示。這些游戲?qū)ο罂梢砸宰痈割惖年P系呈現(xiàn),也可以是多層次。內(nèi)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 焦作新材料職業(yè)學院《GNSS測量原理及應用》2023-2024學年第一學期期末試卷
- 湖北理工學院《精準協(xié)作》2023-2024學年第一學期期末試卷
- 河源職業(yè)技術學院《多聲部音樂基礎》2023-2024學年第一學期期末試卷
- 浙江藝術職業(yè)學院《建筑設計基礎A1》2023-2024學年第一學期期末試卷
- 浙江工商職業(yè)技術學院《工程預算課程設計》2023-2024學年第一學期期末試卷
- 中山火炬職業(yè)技術學院《電子工藝技術基礎》2023-2024學年第一學期期末試卷
- 鄭州職業(yè)技術學院《功能性食品概況》2023-2024學年第一學期期末試卷
- 小學黨員活動量化積分制度
- 長沙衛(wèi)生職業(yè)學院《民族民間音樂》2023-2024學年第一學期期末試卷
- 云南農(nóng)業(yè)職業(yè)技術學院《現(xiàn)代生物技術綜合實驗》2023-2024學年第一學期期末試卷
- 2024年新青島版(六三制)三年級下冊科學全冊知識點
- 朝韓關系相關分析
- 校園熱水方案
- 跟蹤服務項目活動實施方案
- 新能源汽車產(chǎn)業(yè)鏈中的區(qū)域發(fā)展不均衡分析與對策
- 財務機器人技術在會計工作中的應用
- 《保單檢視專題》課件
- 建筑保溫隔熱構造
- 智慧財務綜合實訓
- 安徽省合肥市2021-2022學年七年級上學期期末數(shù)學試題(含答案)3
- 教育專家報告合集:年度得到:沈祖蕓全球教育報告(2023-2024)
評論
0/150
提交評論