




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1章概述2Ch1概述1.1C#語言和VS2017開發(fā)環(huán)境1.2項目和解決方案1.3應(yīng)用程序主菜單設(shè)計1.4同一個解決方案中不同項目之間的交互1.5C#代碼的組織和調(diào)試1.1C#語言和VS2017開發(fā)環(huán)境1.1.1C#語言和.NET框架1.1.2VS2017開發(fā)環(huán)境1.1.3在VS2017下能開發(fā)哪些類型的應(yīng)用41.1.1C#語言和.NET框架1、C#語言的特點C#(讀作“Csharp”)是一種基于.NET的完全面向?qū)ο蟮母呒壋绦蛟O(shè)計語言。
以下內(nèi)容自己在學(xué)習(xí)中慢慢體會,學(xué)完后再看語法簡潔精心的面向?qū)ο笤O(shè)計。與Web的緊密結(jié)合??煽康陌踩耘c錯誤處理??煽康陌姹究刂萍夹g(shù)。很強的靈活性和兼容性。2、軟件公司使用的語言和開發(fā)工具簡介1996年之前:主要用C、C++、VB、FoxPro、PASCAL、FORTRAN、COBOL、LISP、……等1996-2002年:主要用Eclipse(Java)、VC++6.0、Delphi(Pascal語言)2003年至今:Eclipse(Java)、VisualStudio(C#、C++)結(jié)論
C++、C#、Java是全世界目前最流行的高級開發(fā)語言。1.1.1C#語言和.NET框架3、C#和VisualStudio系列開發(fā)工具C#被規(guī)定為高級語言開發(fā)標準2001年C#被ECMA(歐洲計算機協(xié)會)規(guī)定為高級語言開發(fā)標準。2003年C#被ISO(國際標準化組織)規(guī)定為高級語言開發(fā)標準。C#和VisualStudio的版本發(fā)展2003年C#1.0和VS2003,2005年C#2.0和VS2005,2008年C#3.0和VS2008,2010年C#4.0和VS2010,2012年C#5.0和VS2012,2013年C#5.0和VS2013,2015年C#6.0和VS2015,2017年3月:C#7.0和VS2017。VS2017企業(yè)版(Enterprise)是目前功能最強的版本(收費),VS2017社區(qū)版(Community)是免費版能用C#編寫在Windows、Linux、MAC上運行的各種應(yīng)用程序【桌面、移動、Web】。能編寫在Android、iOS、Win10上運行的手機應(yīng)用程序。能編寫基于Unity架構(gòu)的(桌面、移動)2D、3D游戲和虛擬現(xiàn)實(VR)應(yīng)用。1.1.1C#語言和.NET框架1.1.1C#語言和.NET框架4、Microsoft.NET框架(1)什么是.NET框架Microsoft.NET框架是生成、運行.NET應(yīng)用程序和WebService的組件庫。由公共語言運行庫(CLR)和類庫組成,其中類庫為開發(fā)和運行.NET應(yīng)用程序提供了各種支持,是與公共語言運行庫緊密集成的可重用的類的集合。開源、跨平臺支持。.NET原生支持Windows(最強的開發(fā)工具),另外還支持Linux、macOS、iOS、Android等。本書介紹的是在Windows上運行的應(yīng)用程序(forWindows),實驗室安裝的是VS2015企業(yè)版,建議你自己的筆記本安裝免費的【VS2017Community】。使用VS2015,除了開發(fā)ForWindows的各種應(yīng)用程序外,還可以開發(fā)forLinux、forMac、forAndroid、foriOS的應(yīng)用程序。
1.1.1C#語言和.NET框架4、Microsoft.NET框架(續(xù))(2).NET的特點:一種框架、多種語言支持C#、C++、VB、F#、……等20多種高級程序設(shè)計語言。注意用基于.NET框架開發(fā)的應(yīng)用程序,不論使用的是哪種高級語言,均必須在安裝了.NET框架的計算機上才能運行。這種設(shè)計架構(gòu)與Java應(yīng)用程序必須在安裝了JavaSDK的計算機上才能運行相似。哪些操作系統(tǒng)能安裝.NET框架Windows系列的操作系統(tǒng)Linux系列的操作系統(tǒng)MAC系列的操作系統(tǒng)1.1.1C#語言和.NET框架4、Microsoft.NET框架(續(xù))(3)公共語言運行庫(CLR)CLR是.NET框架的基礎(chǔ),為多種編程語言提供統(tǒng)一的運行環(huán)境。
托管代碼(C#、C++均可實現(xiàn))以運行庫為編譯目標的代碼稱為托管代碼。特點:兼容性好、不依賴硬件、升級簡單。
非托管代碼(C#、C++均可實現(xiàn))以CPU為編譯目標的代碼稱為非托管代碼。特點:兼容性差、硬件依賴性強、升級困難。1.1.1C#語言和.NET框架4、Microsoft.NET框架(續(xù))(4)中間語言(IL)使用.NET框架提供的編譯器可直接將源程序編譯為.EXE或者.DLL文件,此時編譯出來的程序代碼并不是CPU能直接執(zhí)行的機器代碼,而是一種中間語言代碼(IL)。使用中間語言代碼的優(yōu)點可以實現(xiàn)平臺無關(guān)性,即與特定的CPU無關(guān);只要能將某種語言編譯為IL代碼,就可以實現(xiàn)這些語言之間的交互操作。1.1.1C#語言和.NET框架4、Microsoft.NET框架(續(xù))(5)即時編譯(JIT)執(zhí)行時CLR會將需要的IL代碼裝入內(nèi)存,通過JIT編譯器(Just-In-Time)將其編譯成所用平臺的CPU可直接執(zhí)行的機器代碼。即時編譯并不是一次把整個應(yīng)用程序全部編譯完,而是只編譯它調(diào)用的那部分代碼所在的模塊。
為什么要采用即時編譯JIT編譯器可以有效地提高系統(tǒng)的性能??衫矛F(xiàn)有CPU和GPU硬件提供的功能即時生成優(yōu)化后的可執(zhí)行代碼。1.1.2VS2017開發(fā)環(huán)境簡介1.VisualStudioIDE和VisualStudioCode簡介VisualStudioIDE是微軟公司推出的基于.NET的可視化集成開發(fā)工具,這是一種將各種架構(gòu)和功能高度集成在一起的“重量級”開發(fā)工具。VisualStudioCode開發(fā)工具(簡稱VSCode)是微軟公司推出的一種免費和開源的“輕量級”開發(fā)工具,可安裝在Windows、MAC、Linux等操作系統(tǒng)平臺上,支持JavaScript、TypeScript、C#、C++、Java、Python、PHP等幾十種編程語言。1.1.2VS2017開發(fā)環(huán)境簡介2.下載和運行VS2017安裝程序 VS2017分為社區(qū)版(CommunityEdition,免費,適用于個人學(xué)習(xí)和開發(fā))、專業(yè)版(ProfessionalEdition,收費,適用于中小型團隊開發(fā))和企業(yè)版(EnterpriseEdition,收費,適用于大型團隊開發(fā))。3.【工作負載】選項卡下的安裝選項 VS2017簡體中文企業(yè)版包含了很多安裝選項。這些選項都分別歸類到不同的選項卡下,包括工作負載、單個組件、語言包、安裝位置。1.1.2VS2017開發(fā)環(huán)境簡介4.【單個組件】和【語言包】選項卡下的安裝選項 GitHub提供基于云的一站式存儲和服務(wù),是一個面向開源及私有軟件項目的托管平臺。它可以幫助開發(fā)人員存儲和管理代碼,以及跟蹤和控制對代碼的更改。5.填入序列號
安裝后運行VS2017,填入合法的序列號,然后退出VS2017。6.VS2017選項設(shè)置
啟動VS2017后,可根據(jù)需要更改下面的選項設(shè)置。1.1.3在VS2017下能開發(fā)哪些類型的應(yīng)用
利用VS2017集成開發(fā)環(huán)境,可輕松開發(fā)各種類型的應(yīng)用程序。下面列出的只是一些典型的應(yīng)用。(1)企業(yè)級桌面應(yīng)用開發(fā)(WPF、C#)。(2)TCP/UDP/HTTP等協(xié)議類網(wǎng)絡(luò)應(yīng)用開發(fā)(WPF、WCF、C#)。(3)三維設(shè)計與可視化應(yīng)用開發(fā)(WPF、C#)。(4)跨平臺移動應(yīng)用開發(fā)(Xamarin.Forms、WPF、C#)。(5)跨平臺Web應(yīng)用開發(fā)(ASP.NETCore、JavaScript、HTML、CSS、C#)。(6)虛擬現(xiàn)實與2D、3D游戲開發(fā)(Unity、C#)。(7)云計算與大數(shù)據(jù)應(yīng)用開發(fā)(Python)。(8)人工智能應(yīng)用開發(fā)(Python)。1.2項目和解決方案1.2.1基本概念1.2.2新建項目和解決方案1.2.3添加ExampleWpfApp項目到解決方案1.2.4添加Wpfz項目到解決方案1.2.5添加其他項目到解決方案1.2.6源程序備份1.2.1基本概念
項目也叫工程,主要用于組織和管理應(yīng)用程序的各種資源和源代碼,包括代碼文件、圖片文件、樣式文件、音視頻文件等。
新建項目時,一個解決方案中默認只包含一個項目,解決方案名和項目名默認相同。但是在實際的應(yīng)用開發(fā)中,同一個解決方案中往往都會包含多個項目。1.2.2新建項目和解決方案1.新建ExampleConsoleApp項目和V4B1Source解決方案1.2.2新建項目和解決方案2.修改Program.cs顯示“HelloWorldConsoleApp”3.調(diào)試運行項目1.2.3添加ExampleWpfApp項目到解決方案1.添加ExampleWpfApp項目
在VS2017開發(fā)環(huán)境下,鼠標右擊【解決方案資源管理器】下的解決方案名“V4B1Source”,在彈出的快捷窗口中單擊【添加】→【新建項目】,在彈出的新窗口中選擇【W(wǎng)PF應(yīng)用(.NETFramework)】,修改項目名稱為ExampleWpfApp,單擊【確定】按鈕。1.2.3添加ExampleWpfApp項目到解決方案2.修改MainWindow.xaml顯示“HelloWorldWpfApp”
將ExampleWpfApp項目的MainWindow.xaml文件改為課本描述內(nèi)容。3.設(shè)置ExampleWpfApp為默認啟動的項目
使用鼠標右擊【解決方案資源管理器】中的項目名“ExampleWpfApp”,在彈出的快捷菜單中單擊【設(shè)為啟動項目】。1.2.3添加ExampleWpfApp項目到解決方案4.調(diào)試運行
將ExampleWpfApp設(shè)置為默認啟動的項目,然后按<F5>鍵調(diào)試運行,即可看到圖1-11所示的效果。5.如何重新打開解決方案V4B1Source解決方案創(chuàng)建完畢后,在V4B1Source文件夾下包含了一個名為V4B1Source.sln的文件,雙擊該文件,就會重新打開該解決方案。1.2.4添加Wpfz項目到解決方案1.添加Wpfz項目
在VS2017開發(fā)環(huán)境下,使用鼠標右擊【解決方案資源管理器】中的解決方案名“V4B1Source”,單擊【添加】→【新建項目】,在彈出的窗口中選擇【W(wǎng)PF自定義控件庫(.NETFramework)】,并修改項目名稱為“Wpfz”,單擊【確定】按鈕。2.重新生成項目
使用鼠標右擊【解決方案資源管理器】下的Wpfz項目名,在得出:快捷菜單中選擇【重新生成】,此時在該項目的bin/Debug文件夾下就生成了Wpfz.dll文件。1.2.5添加其他項目到解決方案1.添加附錄A相關(guān)的項目
附錄A的參考源程序都在V4B1Source解決方案下以“FuLuA”為前綴的項目中。2.添加附錄B相關(guān)的項目
附錄B的參考源程序全部在FuLuBWpfApp項目中。1.3應(yīng)用程序主菜單設(shè)計1.3.1控制臺應(yīng)用程序項目的主菜單設(shè)計1.3.2WPF應(yīng)用程序項目的主菜單設(shè)計1.3.1控制臺應(yīng)用程序項目的主菜單設(shè)計1.修改Program.cs文件2.調(diào)試運行
鼠標右擊【解決方案資源管理器】中的項目名“ExampleConsoleApp”,在彈出的快捷菜單中單擊【設(shè)為啟動項目】,默認啟動ExampleConsoleApp。按<F5>鍵調(diào)試運行。1.3.1控制臺應(yīng)用程序項目的主菜單設(shè)計3.添加第1章的主菜單和示例
鼠標右擊ExampleConsoleApp項目,在彈出的快捷菜單中選擇【添加】→【新建文件夾】,并將文件夾命名為Ch01,然后鼠標右擊該文件夾,在彈出的快捷菜單中選擇【添加】→【類】,分別添加下面的文件。4.再次調(diào)試運行
按<F5>鍵調(diào)試運行1.3.2WPF應(yīng)用程序項目的主菜單設(shè)計1.在Wpfz項目中添加自定義控件和主題
2.在ExampleWpfApp項目中添加資源文件
在ExampleWpfApp項目中添加一個名為Resources的文件夾。3.添加主題引用1.3.2WPF應(yīng)用程序項目的主菜單設(shè)計3.添加主題引用(1)添加引用。鼠標右擊項目的【引用】,在彈出的快捷菜單中選擇【添加引用】命令,在彈出的窗口中選擇要引用的dll文件。(2)鼠標單擊引用的dll文件,將其【復(fù)制本地】屬性改為“True”。4.修改App.xaml文件 App.xaml是設(shè)置啟動窗口以及設(shè)置主題和全局樣式的地方。雙擊ExampleWpfApp項目下的App.xaml文件,即可修改。1.3.2WPF應(yīng)用程序項目的主菜單設(shè)計5.添加Default.xaml文件
在彈出的快捷菜單中依次選擇【添加】→【頁】,添加一個文件名為Default.xaml的頁。6.修改MainWindow.xaml文件及其代碼隱藏類7.調(diào)試運行
按<F5>鍵調(diào)試運行。1.4同一個解決方案中不同項目之間的交互1.4.1在應(yīng)用程序中調(diào)用自定義控件庫1.4.2在WPF應(yīng)用程序中調(diào)用控制臺應(yīng)用程序1.4.1在應(yīng)用程序中調(diào)用自定義控件庫1.在App.xaml.cs文件中添加ExecConsoleApp方法
這一步的目的是在WPF應(yīng)用程序項目中調(diào)用控制臺應(yīng)用程序中包含的例子。2.添加E01HelloWorldPage.xaml文件
先添加一個名為Ch01的文件夾到ExampleWpfApp項目中,然后鼠標右擊該文件夾,在彈出的快捷菜單中單擊【添加】→【頁】,將文件名改為“E01HelloWorldPage.xaml”,單擊【添加】按鈕。1.4.2在WPF應(yīng)用程序中調(diào)用控制臺應(yīng)用程序3.修改E01HelloWorldPage.xaml.cs文件
4.調(diào)試運行
按<F5>鍵調(diào)試運行。1.5C#代碼的組織和調(diào)試1.5.1命名空間和類1.5.2Main方法1.5.3代碼注釋與代碼的快速輸入1.5.4C#代碼命名約定1.5.5通過斷點調(diào)試C#程序1.5.1命名空間和類1.將類劃分到不同的命名空間中是對類的一種劃分,類似于目錄和文件的劃分形式。命令空間是一種邏輯劃分,而非物理上的存儲分類。命名空間命名空間命名空間命名空間命名空間命名空間命名空間命名空間類類類………………1.5.1命名空間和類2.using關(guān)鍵字作為引用指令(指定引用的命名空間),例如:usingSystem.Windows.Forms;作為別名指令(簡化命名空間的層次表達形式),例如:usingWinForm=System.Windows.Form;作為語句(定義一個范圍)程序執(zhí)行到“}”時,就會自動釋放font1對象,例如:using(varfont1=newFont("Arial",10.0f);){……}1.5.2Main方法一個應(yīng)用程序中只能有一個Main方法,具體要求:應(yīng)用程序入口的方法名必須是“Main”,注意M大寫Main方法必須聲明為publicstaticMain方法的返回類型只能是void或者int。返回類型為int時,一般用于返回錯誤代碼Main方法可以放在任何一個類中。一般將Main方法放在Program.cs文件中,這樣容易找到它,例如MyConsoleApp中的Program.cs。WPF應(yīng)用程序中的Main方法是自動生成的,而且不允許開發(fā)人員直接修改該方法,詳見obj/Debug文件夾下的App.g.i.cs文件。1.5.3代碼注釋與代碼的快速輸入1、代碼的常規(guī)注釋方式單行注釋:以“//”符號開始,任何位于“//”符號后的本行文字都視為注釋。說明:一般利用快捷鍵一次性注釋多行,而不是一行一行地去添加注釋。塊注釋:以“/*”開始,“*/”結(jié)束。任何介于這對符號之間的文字塊都視為注釋。1.5.3代碼注釋與代碼的快速輸入2、XML注釋方式“///”符號是一種XML注釋方式在用戶自定義的類型如類、接口、枚舉等或者在其成員上方,或者命名空間的聲明上方連續(xù)鍵入3個斜杠字符可以在鍵入方法名和參數(shù)的過程中看到用XML注釋的智能提示。1.5.3代碼注釋與代碼的快速輸入3、#region注釋方式#region是一條預(yù)處理指令,用于給程序段添加邏輯功能注釋,讓某一部分代碼實現(xiàn)的邏輯功能看起來更清晰。被包圍的代碼還可以折疊和展開。舉例:#region程序入口staticvoidMain(string[]args){......}#endregion1.5.4C#代碼命名約定1.Pascal命名法
類名、方法名和屬性名全部使用Pascal命名法,即所有單詞連寫,每個單詞的第1個字母大寫,其他字母小寫。2.Camel命名法
變量名、對象名以及方法的參數(shù)名全部使用Camel命名法,即所有單詞連寫,但是第1個單詞全部小寫,其他每個單詞的第1個字母大寫。1.5.4C#代碼命名約定3.前綴命名法
如果是私有字段,為了和具有相同名字的屬性名區(qū)分,私有的字段名也可以用下劃線“_”開頭。4.控件命名法
關(guān)于控件對象的命名,有兩種常用的命名形式,一種是“有意義的名稱+控件名”。1.5.5通過斷點調(diào)試C#程序斷點調(diào)試是編程人員的必備素質(zhì),利用斷點查找程序的邏輯錯誤,是最常用的手段之一。1、設(shè)置和取消斷點單擊某代碼行左邊的灰色區(qū)域。單擊設(shè)置,再次單擊取消設(shè)置。鼠標右擊某代碼行,選擇【斷點】
【插入斷點】或者【刪除斷點】。單擊某代碼行,直接按<F9>鍵進行設(shè)置或取消設(shè)置。2、利用斷點調(diào)試程序按<F5>執(zhí)行到斷點,<Shift>+<F5>鍵終止調(diào)試。<F10>逐過程、<F11>逐語句1.5.5通過斷點調(diào)試C#程序3、查看定義和轉(zhuǎn)到定義(以WPF應(yīng)用程序為例)鼠標右擊InitializeComponent();方法,單擊【查看定義】,此時會在其下方直接顯示該方法的源程序。鼠標右擊InitializeComponent();方法,單擊【轉(zhuǎn)到定義】,此時會在單獨的選項卡中顯示該方法的源程序。
第2章控制臺和WPF編程入門47Ch2控制臺和WPF編程入門2.1控制臺應(yīng)用程序入門2.2WPF應(yīng)用程序入門2.1控制臺應(yīng)用程序入門2.1.1控制臺輸出與輸入2.1.2數(shù)據(jù)的格式化表示與基本用法2.1.3在WPF中調(diào)用控制臺應(yīng)用程序中的對應(yīng)例子2.1控制臺應(yīng)用程序入門
控制臺應(yīng)用程序是通過命令行方式運行的程序。用戶可在命令行窗口輸入文本字符串,在顯示器上把文本逐行顯示出來。2.1.1控制臺輸出與輸入1、控制臺輸出通過System.Console類提供的靜態(tài)Write、WriteLine方法實現(xiàn)控制臺輸出。Console.Write();把各種類型的數(shù)據(jù)或?qū)ο筠D(zhuǎn)換成字符串寫入標準輸出流Console.WriteLine();與Write的區(qū)別:自動輸出回車換行符(“\r\n”);例如:intage=18;strings="abc";Console.Write(s);Console.WriteLine(age);2.1.1控制臺輸出與輸入2、控制臺輸入常用有:Console.ReadKey()從標準輸入流讀取用戶按下的字符或功能鍵。例如:varc=Console.ReadKey();Console.ReadLine();從標準輸入流讀取一行字符。例如:
strings=Console.ReadLine();2.1.2數(shù)據(jù)的格式化表示與基本用法
無論是控制臺應(yīng)用程序、WPF應(yīng)用程序還是其他類型的應(yīng)用程序模型,都可以利用string.Format方法將數(shù)據(jù)轉(zhuǎn)換為字符串,并按規(guī)定的格式化表示形式定義輸出的格式。2.1.2數(shù)據(jù)的格式化表示與基本用法1、格式化字符串的一般表示形式{N[,M][:格式碼]}N—從零開始的整數(shù),表示第幾個參數(shù)。M—可選,用整數(shù)表示最小長度。若參數(shù)N的長度小于M,默認用空格填充;若大于,按實際數(shù)輸出。M為負左對齊,M為正右對齊;格式碼—可選。C—貨幣形式、D—十進制、F—固定精度、E—指數(shù)、N—用逗號分隔千位數(shù)字、P—百分比、X—十六進制,格式碼也可以用占位符表示:0—強制占位符、#—有效占位符2.1.2數(shù)據(jù)的格式化表示與基本用法2、利用string.Format方法格式化字符串在控制臺應(yīng)用程序中,可以先用String.Format方法拼接字符串,再用WriteLine方法輸出;該方法可于各種類型的應(yīng)用程序(桌面、Web、移動),而不是僅在控制臺應(yīng)用程序中可以這樣做。例如:inti=123;strings1=string.Format("{0:d6}",i);
strings2=$"{i:d6}“//結(jié)果:s1=000123,s2=000123Console.WriteLine("s1="+s1+",s2="+s2);2.1.2數(shù)據(jù)的格式化表示與基本用法3.利用“$”字符串表示法得到格式化后的字符串$”字符串表示法是從C#6.0開始增加的一種格式化字符串的簡潔表示形式,這種方式比使用string.Format更直觀易理解。例如:inti=123;strings1=$"{i:d6}";Console.WriteLine(s1);2.1.2數(shù)據(jù)的格式化表示與基本用法4.利用ToString方法格式化字符串如果是一個變量,使用ToString方法可能更簡單,該方法同樣適用于各種類型的應(yīng)用程序。例如:intn1=12;strings1=n1.ToString("X4");//X:十六進制。結(jié)果:000Cstrings2=n1.ToString("d5");//結(jié)果:000122.2WPF應(yīng)用程序入門2.2.1基本概念2.2.2WPF窗口和WPF頁2.2.3WPF控件模型及其樣式控制2.2.4WPF基本控件2.2.5在WPF應(yīng)用程序中彈出消息框2.2.6文本和密碼輸入2.2.7在WPF應(yīng)用程序中調(diào)用DLL文件2.2.8WPF中的顏色表示2.2.1基本概念概念1:WPFWPF是一種“以屬性為核心”的編程模型。主要用于開發(fā)C/S客戶端程序(比如QQ、360安全衛(wèi)士、飛信、股票軟件、……等)。WPF基于DirectX和GPU加速來實現(xiàn)的圖形界面顯示技術(shù)。WinForm的界面是全部用C#代碼實現(xiàn),WPF的界面除了用C#來實現(xiàn)以外,還可以用XAML來實現(xiàn)。凡是用XAML編寫的界面都可以用C#代碼實現(xiàn),但反之不一定。概念2:App類App類的基類為Application類,該類主要定義在整個應(yīng)用程序范圍內(nèi)都可以使用的資源和屬性。例如:Applicationcurrent=App.Current;2.2.1基本概念1、應(yīng)用程序入口
仍然是Main方法,但該方法被隱藏了,改為讓開發(fā)人員通過
App.xaml文件來設(shè)置。<Applicationx:Class="Source.App"……
StartupUri="MainWindow.xaml"><Application.Resources>……</Application.Resources></Application>592.2.1基本概念2.XAML標記和代碼隱藏
WPF使用XAML(可擴展應(yīng)用程序標記語言)為應(yīng)用程序提供所見即所得的聲明性編程模型,使用C#語言編寫后臺邏輯代碼。(1)XAML標記
XAML是一種基于XML(可擴展標記語言)且遵循XML結(jié)構(gòu)規(guī)則的聲明性標記語言。XAML文件是具有.xaml擴展名的XML文件,文件編碼默認使用UTF-8。(2)代碼隱藏
應(yīng)用程序的主要行為是實現(xiàn)響應(yīng)用戶交互的功能,包括處理事件(例如,單擊菜單、工具欄或按鈕)以及調(diào)用業(yè)務(wù)邏輯和數(shù)據(jù)訪問邏輯。在WPF中,通過與XAML標記相關(guān)聯(lián)的C#代碼來實現(xiàn)此行為。這種用C#實現(xiàn)的代碼稱為代碼隱藏。602.2.1基本概念2.XAML標記和代碼隱藏
WPF使用XAML(可擴展應(yīng)用程序標記語言)為應(yīng)用程序提供所見即所得的聲明性編程模型,使用C#語言編寫后臺邏輯代碼。(1)XAML標記
XAML是一種基于XML(可擴展標記語言)且遵循XML結(jié)構(gòu)規(guī)則的聲明性標記語言。XAML文件是具有.xaml擴展名的XML文件,文件編碼默認使用UTF-8。(2)代碼隱藏
應(yīng)用程序的主要行為是實現(xiàn)響應(yīng)用戶交互的功能,包括處理事件(例如,單擊菜單、工具欄或按鈕)以及調(diào)用業(yè)務(wù)邏輯和數(shù)據(jù)訪問邏輯。在WPF中,通過與XAML標記相關(guān)聯(lián)的C#代碼來實現(xiàn)此行為。這種用C#實現(xiàn)的代碼稱為代碼隱藏。612.2.1基本概念3.根元素和XAML命名空間聲明XAML命名空間解決了XAML標記和C#代碼共享的問題。根元素和XAML命名空間一個XAML文件(擴展名為.xaml的文件)只能有一個根元素。x:Class用于將XAML和代碼隱藏類關(guān)聯(lián)。xmlns特性聲明XAML默認的命名空間。622.2.1基本概念x:前綴編程構(gòu)造根元素的xmlns:x用于XAML命名空間映射,目的是為了通過x:前綴聲明可被其他XAML和C#代碼引用的對象??丶腘ame特性:聲明的目的是為了在代碼隱藏類中引用它。只有在模板、自定義控件、動畫等特殊場合才需要用x:Name特性。在XAML中映射自定義命名空間若在XAML中引用自定義對象,必須在XAML中映射自定義命名空間。63642.2.1基本概念4、XAML基本語法
概念:XAML的語法與HTML的語法非常相似,即都是利用元素、特性(Attribute)和屬性(Property)來描述元素對象的各種要素XAML最基本的語法:<對象名
特性名1="值1"特性名2="值2"……></對象名>XAML中的對象名、特性名以及屬性名都區(qū)分大小寫。652.2.1基本概念4、XAML基本語法(續(xù))(1)對象元素語法對象是指類的實例,在XAML中用對象元素來描述。例如:<ButtonName="OkButton"Content="確定"/>(2)特性語法(最常用)用特性(Attribute)來描述對象的屬性(Property),特性名和特性值之間用賦值號(=)分隔,特性的值始終用字符串來指定,引號默認用雙引號,也可以是單引號,原則是“值”兩邊的引號必須匹配。例如:<ButtonBackground="Blue"Foreground="Red"Content="按鈕1"/>特性語法還可用于描述事件成員。例如:
<ButtonClick="Button_Click">ClickMe!</Button>662.2.1基本概念4、XAML基本語法(續(xù))(3)屬性語法:有時僅僅用特性語法無法來描述對象的某些屬性,此時可以用屬性語法來描述。一般格式為:<類名.屬性名>……</類名.屬性名>例如:<ButtonBackground="Blue"Foreground="Red"Content="右擊觀察快捷菜單"Margin="73,108,74,115">
<Button.ContextMenu><ContextMenu><MenuItem>快捷菜單項1</MenuItem><MenuItem>快捷菜單項2</MenuItem></ContextMenu>
</Button.ContextMenu></Button>672.2.1基本概念4、XAML基本語法(續(xù))(4)集合語法:如果某個屬性采用集合類型,可以使用集合語法。例如(這段代碼是利用【屬性】窗口設(shè)置后自動生成的):<Window.Background><LinearGradientBrush>
<LinearGradientBrush.GradientStops><GradientStopOffset="0.0"Color="Red"/><GradientStopOffset="1.0"Color="Blue"/></LinearGradientBrush.GradientStops></LinearGradientBrush></Window.Background>(5)XAML內(nèi)容屬性:內(nèi)容屬性的用途是為了簡化標記,或者用于嵌套子元素。例如:
<TextBox>ThisisaTextBox</TextBox>
相當于:
<TextBoxText="ThisisaTextBox"/>682.2.1基本概念4、XAML基本語法(續(xù))(6)內(nèi)容屬性和集合語法組合<StackPanel><Button>按鈕1</Button><Button>按鈕2</Button></StackPanel>(7)類型轉(zhuǎn)換器將用字符串進行設(shè)置的特性值轉(zhuǎn)換為其他對象類型或基元值。例如:<ButtonMargin="10,20,30,40"Content="確定"/>相當于:<ButtonContent="確定">
<Button.Margin><ThicknessLeft="10"Top="20"Right="30"Bottom="40"/></Button.Margin></Button>692.2.1基本概念4、XAML基本語法(續(xù))(7)XAML中的空白處理XAML中的空白字符包括空格、換行符、制表符等。默認情況下,XAML處理器會將所有空白字符自動轉(zhuǎn)換為空格。注意:默認情況下,連續(xù)的多個空格將被替換為“一個”空格。如果希望保留文本字符串中的多個空格,可以在該元素的開始標記內(nèi)添加xml:space=“preserve”特性。
702.2.2WPF窗口和WPF頁 WPF應(yīng)用程序有兩種常見的界面呈現(xiàn)技術(shù),一種稱為“WPF窗口”,簡稱“窗口”;另一種稱為“WPF頁”,簡稱“頁(Page)”。712.2.2WPF窗口和WPF頁1.窗口1、窗口分類WPF窗口由非工作區(qū)和工作區(qū)兩部分構(gòu)成,非工作區(qū)主要包括圖標、標題、系統(tǒng)菜單、按鈕和邊框。通過【W(wǎng)indowStyle】屬性可設(shè)置窗口樣式:標準窗口(SingleBorderWindow,默認)無標題窗口(None):只有工作區(qū)部分。
工具窗口(ToolWindow):非工作區(qū)的右上角只有關(guān)閉按鈕,不包括最小化、最大化和還原按鈕。通知圖標(NotifyIcon)。722.2.2WPF窗口和WPF頁2、窗口生存周期指從第1次打開窗口到關(guān)閉窗口經(jīng)歷的一系列過程。在窗口的生存期中,會引發(fā)很多事件(見表7-2)。
常用:SourceInitialized事件Closing事件732.2.2WPF窗口和WPF頁3、激活窗口活動窗口:當前正在捕獲用戶輸入(如鍵盤或鼠標等)的窗口。首次打開一個窗口時,該窗口便成為活動窗口。當窗口變?yōu)榛顒哟翱跁r,會引發(fā)Activated事件。當前活動窗口停用時引發(fā)Deactivated事件。利用IsActive屬性可檢查窗口是否處于活動狀態(tài)。742.2.2WPF窗口和WPF頁4、創(chuàng)建并顯示新窗口在C#代碼中調(diào)用Show方法或者ShowDialog方法顯示窗口。無模式窗口:調(diào)用Show方法。模式窗口:調(diào)用ShowDialog方法。對于“無模式”窗口,調(diào)用Hide方法可將其隱藏。752.2.2WPF窗口和WPF頁
5、關(guān)閉窗口直接調(diào)用Close方法即可關(guān)閉當前打開的窗口窗口關(guān)閉時會引發(fā)兩個事件:Closing事件和Closed事件。6、窗口關(guān)聯(lián)通過設(shè)置子窗口的Owner屬性讓該子窗口附屬于其父窗口。例如:WindowownedWindow=newWindow();ownedWindow.Owner=this;ownedWindow.Show();762.2.2WPF窗口和WPF頁
2.頁要點:(1)在WPF應(yīng)用程序中,既可以用窗口(Window)設(shè)計界面,也可以用
頁(Page)設(shè)計界面。(2)用Page時,可通過Frame或者NavigationWindow來承載。
1、在窗口中承載Page(不常用)
將Window作為頁的宿主窗口。例如:Windoww=newWindow();Page1p=newPage1();w.Content=p;w.Show();這種方式只能用C#代碼實現(xiàn),而且承載的頁沒有導(dǎo)航功能,頁中的超鏈接也不會起作用,因此在實際應(yīng)用中很少這樣用。772.2.2WPF窗口和WPF頁
2、在NavigationWindow中承載Page(不常用)將NavigationWindow(瀏覽器用的窗口)作為頁的宿主窗口。例如:Windoww=newSystem.Windows.Navigation.NavigationWindow();w.Content=newPageExamples.Page1();w.Show();采用這種方式時,可以在頁中設(shè)置導(dǎo)航窗口(NavigationWindow)的標題以及窗口大小。也可以在C#代碼中使用NavigationService類提供的靜態(tài)方法實現(xiàn)導(dǎo)航功能。Page的常用屬性如下。WindowTitle:設(shè)置導(dǎo)航窗口的標題。WindowWidth和WindowHeight:設(shè)置導(dǎo)航窗口的寬度和高度。ShowsNavigationUI:false表示不顯示導(dǎo)航條,true表示顯示導(dǎo)航條。NavigationService屬性:獲取該頁的宿主窗口中管理導(dǎo)航服務(wù)的對象,利用該對象可實現(xiàn)前進、后退、清除導(dǎo)航記錄等操作。782.2.2WPF窗口和WPF頁
3、在Frame中承載Page(常用)在Frame元素中將其Source屬性設(shè)置為導(dǎo)航到的頁,在這種方式下,既可以用XAML加載頁并實現(xiàn)導(dǎo)航,也可以用C#代碼來實現(xiàn)。例如:用XAML實現(xiàn):<FrameName="frame1"NavigationUIVisibility="Visible"Source="Page1.xaml"Background="#FFF9F4D4"/>用C#實現(xiàn):frame1.Source=newUri("Page1.xaml",UriKind.Relative);792.2.3WPF控件模型及其樣式控制1.WPF控件模型內(nèi)容:指顯示控件內(nèi)容的區(qū)域,可以是文本、圖像或其他控件元素。Padding:內(nèi)邊距。即邊框和內(nèi)容之間的矩形環(huán)區(qū)域。邊框:即內(nèi)邊距和外邊距之間的黑色矩形環(huán)區(qū)域。Margin:外邊距。指邊框和圖中虛線包圍的矩形環(huán)區(qū)域,表示該控件和其他控件之間的距離。802.2.3WPF控件模型及其樣式控制2.控件共有的基本屬性Name和x:Name
在WPF應(yīng)用程序中,可以用Name特性指定元素對象的名稱,以便在代碼隱藏類中能通過C#代碼找到該XAML元素。例如: <ButtonName="btnOK"Content="確定"/>XAML:
如果既希望在C#代碼中能引用指定的元素對象,又希望在XAML代碼中也能引用該元素對象,可通過x:Name特性來聲明這個元素。例如: <Buttonx:Name="ButtonOK"Content="確定"/>812.2.3WPF控件模型及其樣式控制外邊距(Margin)常用有兩種形式,一種是用一個值來描述,例如下面的代碼表示按鈕周邊四個方向的外邊距都是10。XAML:<ButtonName="Button1"Margin="10">按鈕1</Button>C#:Button1.Margin=newThickness(10);另一種是按照“左、上、右、下”的順序用4個值分別描述。例如下面的代碼表示Button2按鈕的左、上、右、下的外邊距分別是0、10、0、10XAML:<ButtonName="Button2"Margin="0,10,0,10">按鈕2</Button>C#:Button2.Margin=newThickness(0,10,0,10);內(nèi)邊距(Padding)控制元素內(nèi)部與其子元素或文本之間的間距,其用法和Margin屬性的用法相似。822.2.3WPF控件模型及其樣式控制水平對齊(HorizontalAlignment)聲明元素相對于其父元素的水平對齊方式。垂直對齊(VerticalAlignment)描述元素相對于其父元素的垂直對齊方式??赡艿娜≈捣謩e為Top(頂端對齊)、Center(中心對齊)、Bottom(底端對齊)和Stretch(默認,垂直拉伸)。
成
員說
明Left、Center、Right子元素在其父元素內(nèi)左端對齊、中心對齊、右端對齊Stretch(默認)拉伸子元素至父元素的已分配空間。如果聲明了Width和Height,則Width和Height優(yōu)先832.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素
利用Style元素可以很方便地一次性控制界面(窗口或頁)中包含的多個元素呈現(xiàn)的效果,樣式的控制范圍由元素樹中所定義的資源(Resources)的位置來決定。(2)基本用法
后面我們還會在單獨的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。
842.2.4WPF基本控件1.StackPanel和WrapPanel這兩個控件主要用于將其子元素按縱向或者橫向依次排列。StackPanel和WrapPanel的常用屬性都是Orientation屬性,用于控制排列的方向??蛇x值為Vertical(縱向排列)和Horizontal(橫向排列)。StackPanel默認縱向排列且子元素超出邊界時不再顯示,WrapPanel默認橫向排列且子元素超出邊界時自動轉(zhuǎn)到下一行顯示。852.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素
利用Style元素可以很方便地一次性控制界面(窗口或頁)中包含的多個元素呈現(xiàn)的效果,樣式的控制范圍由元素樹中所定義的資源(Resources)的位置來決定。(2)基本用法
后面我們還會在單獨的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。
862.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素
利用Style元素可以很方便地一次性控制界面(窗口或頁)中包含的多個元素呈現(xiàn)的效果,樣式的控制范圍由元素樹中所定義的資源(Resources)的位置來決定。(2)基本用法
后面我們還會在單獨的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。
872.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素
利用Style元素可以很方便地一次性控制界面(窗口或頁)中包含的多個元素呈現(xiàn)的效果,樣式的控制范圍由元素樹中所定義的資源(Resources)的位置來決定。(2)基本用法
后面我們還會在單獨的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。
882.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素
利用Style元素可以很方便地一次性控制界面(窗口或頁)中包含的多個元素呈現(xiàn)的效果,樣式的控制范圍由元素樹中所定義的資源(Resources)的位置來決定。(2)基本用法
后面我們還會在單獨的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。
892.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素
利用Style元素可以很方便地一次性控制界面(窗口或頁)中包含的多個元素呈現(xiàn)的效果,樣式的控制范圍由元素樹中所定義的資源(Resources)的位置來決定。(2)基本用法
后面我們還會在單獨的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。
902.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素
利用Style元素可以很方便地一次性控制界面(窗口或頁)中包含的多個元素呈現(xiàn)的效果,樣式的控制范圍由元素樹中所定義的資源(Resources)的位置來決定。(2)基本用法
后面我們還會在單獨的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。
912.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素
利用Style元素可以很方便地一次性控制界面(窗口或頁)中包含的多個元素呈現(xiàn)的效果,樣式的控制范圍由元素樹中所定義的資源(Resources)的位置來決定。(2)基本用法
后面我們還會在單獨的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。
922.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素
利用Style元素可以很方便地一次性控制界面(窗口或頁)中包含的多個元素呈現(xiàn)的效果,樣式的控制范圍由元素樹中所定義的資源(Resources)的位置來決定。(2)基本用法
后面我們還會在單獨的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。
932.2.4WPF基本控件1.StackPanel和WrapPanel
這兩個控件主要用于將其子元素按縱向或者橫向依次排列。 StackPanel和WrapPanel的常用屬性都是Orientation屬性,用于控制排列的方向??蛇x值為Vertical(縱向排列)和Horizontal(橫向排列)。 StackPanel默認縱向排列且子元素超出邊界時不再顯示,WrapPanel默認橫向排列且子元素超出邊界時自動轉(zhuǎn)到下一行顯示。
942.2.4WPF基本控件2.GroupBox
GroupBox包含一個標題和一個內(nèi)容項,標題和內(nèi)容都可以是任何類型。常用屬性如下。
Header:獲取或設(shè)置分組框的標題。
Content:獲取或設(shè)置分組框的內(nèi)容。
952.2.4WPF基本控件3.Border
Border用于在某個元素周圍繪制邊框,或者為某元素提供背景。Border的子元素只能有一個,但這個子元素內(nèi)可以包含多個元素。常用屬性如下。CornerRadius:獲取或設(shè)置邊框的圓角半徑。BorderBrush:獲取或設(shè)置邊框的畫筆。BorderThickness:獲取或設(shè)置邊框的粗細。Padding:獲取或設(shè)置Border與其包含的子對象之間的距離。962.2.4WPF基本控件4.本文顯示(TextBlock、Label)(1)TextBlockTextBlock主要用于顯示純文本信息。常用屬性有以下幾種。Text:獲取或設(shè)置要顯示的文本(文字或圖形字符)。FontFamily:獲取或設(shè)置文本使用的字庫名稱。FontSize:獲取或設(shè)置文本的字體大小。Foreground:獲取或設(shè)置文本的顏色。(2)LabelLabel是一個可包含任意內(nèi)容的對象。下面的代碼演示了如何利用它顯示文本。972.2.4WPF基本控件5.按鈕(Button、RepeatButton)Button:除了顯示文字之外還可以顯示圖像或者同時顯示圖像和文字。RepeatButton:從按下按鈕到釋放按鈕的時間段內(nèi)會自動重復(fù)引發(fā)其Click事件。Delay屬性:指定事件的開始時間Interval屬性:控制重復(fù)的間隔時間。982.2.4WPF基本控件【例2-4】演示窗口、頁、文本和圖形字符的基本用法,運行效果如圖2-6所示。其中,左側(cè)為單擊該例子后看到的界面,右側(cè)為單擊【彈出窗口】后看到的效果。992.2.5在WPF應(yīng)用程序中彈出消息框消息框(MessageBox類)調(diào)用靜態(tài)Show方法顯示消息框,常用重載形式有:publicstaticDialogResultShow(stringtext)publicstaticDialogResultShow(stringtext,stringcaption)publicstaticDialogResultShow(stringtext,stringcaption,MessageBoxButtonbuttons,MessageBoxImageicon)1002.2.5在WPF應(yīng)用程序中彈出消息框【例2-5】演示消息框的基本用法,運行結(jié)果如圖2-7所示。1012.2.6文本和密碼輸入1.TextBoxTextBox控件用于顯示或編輯純文本字符。常用屬性如下。Text:表示顯示的文本;MaxLength:限制用戶輸入的字符數(shù);AcceptsReturn:False(默認)、True(按回車鍵換行)TextWrapping:控制是否自動轉(zhuǎn)到下一行,當其值為“Wrap”時,該控件可自動擴展以容納多行文本;BorderBrush:邊框顏色;BorderThickness:邊框?qū)挾?,如果不希望該控件顯示邊框,將其設(shè)置為0即可。例如:<TextBoxMaxLength="5"Width="60"BorderBrush="#FF5ECD3D"BorderThickness="2"TextWrapping="Wrap"Text="多行文本"/>TextBox控件的常用事件是TextChanged事件。1022.2.6文本和密碼輸入2.PasswordBox:密碼輸入。PasswordChar屬性:掩碼,即不論輸入什么字符,顯示的都是用它指定的字符;Password屬性:獲取或設(shè)置輸入的密碼字符串。PasswordChanged事件:當密碼字符串改變時發(fā)生。除了這兩個屬性之外,其他用法和TextBox相同。例如:<PasswordBoxPassword="abc"PasswordChar="*"></PasswordBox>注意:PasswordBox應(yīng)該用PasswordChanged事件,不能用KeyDown、MouseDown或者MouseUp事件來判斷。1032.2.6文本和密碼輸入【例2-6】演示文本框和密碼框的基本用法,運行效果如圖2-8所示。1042.2.7在WPF應(yīng)用程序中調(diào)用DLL文件
在WPF應(yīng)用程序中調(diào)用DLL文件的辦法與在控制臺應(yīng)用程序中調(diào)用DLL文件的辦法類似,區(qū)別僅是在哪里編寫調(diào)用代碼。【例2-7】設(shè)計一個WPF頁,從鍵盤接收n個數(shù),在單獨的庫中計算并返回這n個數(shù)的和。運行效果如圖2-9所示。1052.2.8WPF中的顏色表示
任何一種顏色都是通過對紅(R)、綠(G)、藍(B)三個顏色通道的變化和它們相互之間的疊加來得到的。
通過Alpha通道可控制顏色的透明度。1.顏色通道的XAML表示形式
用XAML表示顏色時,可直接用字符串來聲明。一般形式為“#rrggbb”或者“#aarrggbb”,其中“#”表示十六進制,a表示透明度,r表示紅色通道,g表示綠色通道,b表示藍色通道。也可以使用“#rgb”或者“#argb”的簡寫形式,例如,“#00F”或者“#F00F”。1062.2.8WPF中的顏色表示2.常用顏色格式XAML和C#都可以使用sRGB、ScRGB、HLS以及HSB格式表示顏色,XAML默認使用sRGB。在【屬性】窗口中,單擊R、G、B之一,還可以選擇其他顏色格式。(1)sRGB格式
這種格式用4個字節(jié)表示一個像素的顏色。4個字節(jié)分別表示A(Alpha,即透明度)、R(紅色通道)、G(綠色通道)和B(藍色通道)。1072.2.8WPF中的顏色表示(2)scRGB格式ScRGB格式也是用4個字節(jié)表示一個像素的顏色(A、R、G、B各占1個字節(jié))。4個字節(jié)分別表示A(Alpha,即透明度)、R(紅色通道)、G(綠色通道)和B(藍色通道)。(3)HLS格式和HSB格式
這兩種格式分別用不透明度(Alpha)、色調(diào)(Hue)、飽和度(Saturation)和亮度(Lightness)來表示顏色。1082.2.8WPF中的顏色表示3.命名顏色
為了方便使用,WPF還提供了一組命名顏色。【例2-8】顯示W(wǎng)PF提供的所有命名顏色,運行效果如圖2-10所示。
第3章基本數(shù)據(jù)類型和流程控制語句111Ch3基本數(shù)據(jù)類型和流程控制語句3.1數(shù)據(jù)類型和運算符3.2簡單類型3.3字符串3.4數(shù)組3.5數(shù)據(jù)類型之間的轉(zhuǎn)換3.6流程控制語句3.1數(shù)據(jù)類型和運算符3.1.1C#的類型系統(tǒng)3.1.2常量與變量3.1.3運算符與表達式1133.1.1C#的類型系統(tǒng)C#類型劃分為兩類:值類型和引用類型。值類型:包括簡單類型、枚舉類型、自定義結(jié)構(gòu)類型、可空類型。引用類型:包括類、接口、數(shù)組、委托。
1143.1.1C#的類型系統(tǒng)值類型和引用類型的區(qū)別:值類型的變量保存的是變量的值;引用類型的變量保存的是對象的引用地址。當把一個值類型的變量賦給另一個值類型的變量時,會在棧(stack)中保存兩個完全相同的值;把一個引用變量賦給另一個引用變量,在棧中的兩個值雖然相同,但是由于這兩個值都是堆(heap)中對象的引用地址,所以實際上引用的是同一個對象。1153.1.1C#的類型系統(tǒng)值類型和引用類型的區(qū)別(續(xù))5.進行數(shù)據(jù)操作時,對于值類型,由于每個變量都有自己的值,因此對一個變量的操作不會影響其他變量;6.對于引用類型的變量,對一個變量的數(shù)據(jù)進行操作就是對這個變量在堆中的數(shù)據(jù)進行操作,如果兩個引用類型的變量引用同一個對象,對一個變量的操作也會影響另一個變量。1163.1.1C#的類型系統(tǒng)特性值類型引用類型變量中保存的內(nèi)容實際數(shù)據(jù)對象的引用指針內(nèi)存空間配置棧(stack)受管制的堆(managedheap)內(nèi)存需求較少較多執(zhí)行效率較快較慢內(nèi)存釋放時間點超過變量的作用域時由垃圾回收機制負責(zé)回收值類型和引用類型的區(qū)別一覽表1173.1.2常量與變量1、常量C#用const關(guān)鍵字聲明常量。例如:constintpi=3.1415927;編譯器會把所有聲明為const的常量全部替換為實際的常數(shù)。2、變量:表示一個數(shù)值、一個字符串值或者一個類的實例。inta=100;//聲明一個整型變量a,并賦初值為100inta;//聲明一個整型變量aa=100;//為整型變量a賦值為100inta=100,b,c=200,d;//a、c賦初值,b未賦初值1183.1.2常量與變量3、匿名類型的局部變量局部變量在C#中還可以用var來聲明。用var聲明的仍然是一種強類型的數(shù)據(jù),只是具體的數(shù)據(jù)類型由編譯器負責(zé)推斷而已。例如:varkey=Console.ReadKey();
這條語句和下面的語句是等價的:ConsoleKeyInfokey=Console.ReadKey();1193.1.2常量與變量【例3-1】演示const以及var的基本用法。運行效果如圖3-1所示。其中,左側(cè)為WPF應(yīng)用程序的運行效果,右側(cè)為單擊【用Console實現(xiàn)】按鈕后彈出的控制臺應(yīng)用程序的運行效果。1203.1.3運算符與表達式1、運算符的種類:一元運算符:帶有一個操作數(shù)的運算符,如i++。二元運算符:帶有兩個操作數(shù)的運算符,如x+y。三元運算符:帶有三個操作數(shù)的運算符(只有一個?:運算符)例如:varc=a>0?5:3;//如果a>0,則c為5,否則c為32、表達式
可計算并且結(jié)果為單個值、對象、方法或命名空間的代碼片段。
3.2簡單類型整型即:《計算機組成原理》中介紹的定點數(shù)。在高級語言中,用“整型”來表示“定點整數(shù)”。C#提供了8種整數(shù)類型,分別表示1字節(jié)、2字節(jié)、4字節(jié)和8字節(jié)的整數(shù),每種又都分為有符號數(shù)和無符號數(shù)。給變量賦常數(shù)值時,如果不用類型指定符,默認將int類型的數(shù)值隱式地轉(zhuǎn)換為該類型進行賦值。例:longy=1234;//將int型的數(shù)值1234隱式地轉(zhuǎn)換為long類型1213.2.1整型1、由于小寫字母容易和數(shù)字混淆,所以Uint、Long、Ulong類型的常量指定符一般都用大寫字母。例如:longx=1234L;2、給變量賦值時,既可以采用十進制的常數(shù)也可以采用十六進制的常數(shù)。如果是十六進制常數(shù),在程序中必須加前綴“0x”。例如:longa=0x12ab;該語句聲明一個長整型變量a,并賦值為十六進制的數(shù)(12AB)由于二進制數(shù)都可以用十六進制數(shù)來直觀地表示,所以不需要再提供二進制數(shù)的表示形式。1223.2.2浮點型1、浮點類型有:float、double、decimal它們均屬于值類型。2、內(nèi)部表示在計算機內(nèi)部的硬件實現(xiàn)中,浮點數(shù)分別使用“32位單精度”和“64位雙精度”的IEEE754標準格式來表示(浮點數(shù)的格式見計算機組成原理中的介紹)。3、在C#中可以用下面的形式給浮點型變量賦值:floatx=2.3f;//x的值為2.3,不加f后綴默認為doubley=2.7;//y的值為2.7doublez=2.7E+23;decimalx1=32.12345678901234m;1233.2.2浮點型4、實數(shù)常數(shù)后如果沒有后綴,默認為double類型,double類型也可以加D或d后綴。15d、1.5d、1e10d和122.456D都是double類型。注意:在實數(shù)中,小數(shù)點后必須始終是十進制數(shù)字。1.3F是實數(shù)(F表示該數(shù)為float類型的常數(shù)),但1.F不是,因為F不是十進制數(shù)字。5、小數(shù)型(decimal)是一種特殊的浮點型數(shù)據(jù),其特點是精度高,但表示的數(shù)值范圍并不大。decimalmoney=300.5M;decimaly=9999999999999999999999999M;decimalx=122.123456789123456789M;1243.2.3布爾型(bool)1、布爾型(bool)只有兩個值:true和falseboolisMale=false;boolb=(i>0&&i<10);2、條件表達式的運算結(jié)果必須是bool類型
錯誤用法
正確用法inti=5;j=6;inti=5,j=6;if(i)j+=10;if(i!=0)j+=10;if(j=15)j+=10;if(j==15)j+=10;1253.2.4字符(char)1、字符是值類型,用char表示每個字符占用的字節(jié)數(shù)與字符的編碼方式有關(guān)。C#的字符表示的是單個Unicode編碼的字符。一個Unicode字符占兩字節(jié)(字符的長度為1)。字符型常量:用單引號引起來,例如:charc1='A';2、也可以用十六進制的轉(zhuǎn)義符前綴(“\x”)或Unicode表示法前綴(“\u”)來表示字符型常量,例如:charc2='\x0041';//字母“A”的十六進制表示charc3='\u0041';//字母“A”的Unicode編碼表示1263.2.5枚舉(enum)1、枚舉類型將一組常量用一個類型來表示,該類型簡稱枚舉。定義一個稱為MyColor的枚舉類型:publicenumMyColor{Red,Green,Blue}也可以寫為publicenumMyColor{Red=0,Green=1,Blue=2}2、枚舉中的所有常量值必須是同一種類型(稱為基礎(chǔ)類型)?;A(chǔ)類型只能是8種整型類型之一。如果不指定基礎(chǔ)類型,默認為int類型。注意下面的寫法是錯誤的(想一想為什么是錯誤的):enumMyNumber:byte{x1=255,x2};127【例3-2】定義一個MyColor枚舉類型,然后聲明MyColor類型的變量,通過該變量使用枚舉值。再通過enum類型提供的靜態(tài)GetNames方法將MyColor的所
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 同行合作合同范本
- 綠化苗木栽植合同范本
- 廠區(qū)圍網(wǎng)維修合同范本
- 合同違約金合同范本-
- 業(yè)務(wù)變更合同范本
- 木門及木飾面制作安裝合同范本
- 健身公司合同范本
- 卡丁車加盟合同范本
- 吊車司機聘用合同范本
- 合同范例主播
- 2025年01月中國疾控中心信息中心公開招聘1人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 北京市豐臺區(qū)2024-2025學(xué)年高二上學(xué)期期末英語試題
- 2025年高三第二學(xué)期物理備課組教學(xué)工作計劃
- 丁香園:2024年12月全球新藥月度報告-數(shù)據(jù)篇
- 生產(chǎn)與運作管理-第5版 課件全套 陳志祥 第1-14章 生產(chǎn)系統(tǒng)與生產(chǎn)運作管理概述 -豐田生產(chǎn)方式與精益生產(chǎn)
- 2025年湖南理工職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2024年西安航空職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 2024年港作拖輪項目可行性研究報告
- 人教版小學(xué)數(shù)學(xué)三年級下冊第一單元位置與方向一單元測試
- 雅禮中學(xué)2024-2025學(xué)年初三創(chuàng)新人才選拔數(shù)學(xué)試題及答案
- 2023年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院高職單招(語文)試題庫含答案解析
評論
0/150
提交評論