




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C#.NET程序設(shè)內(nèi)容提VisualC#.Net應(yīng)用程序課程的講義和教案的基礎(chǔ)上整理編輯而成。本書內(nèi)容幾乎涵蓋了使用C#語言開發(fā)Windows應(yīng)用程序和Web應(yīng)用程序(ASP.Net)的各個(gè)方面。為本書可以作為大學(xué)本??朴?jì)算機(jī)導(dǎo)論和C語言程序設(shè)計(jì)課程的后續(xù)課程,或作為學(xué)習(xí)使用C#語言開發(fā)Windows應(yīng)用程序和Web應(yīng)用程序(ASP.Net)的培訓(xùn)班的,也適合使C#語言開發(fā)項(xiàng)目的程序員參考。第一C#語言基本章介紹C#CC#語言,并以C#windowWeb應(yīng)用程序。當(dāng)然僅靠一章的內(nèi)容就完全掌握C#語言是不可能的,如需進(jìn)一步學(xué)習(xí)C#語言,還需要認(rèn)真閱讀有關(guān)C#.Net(以下簡(jiǎn)稱.Net)框架是微軟新一代Web軟件開發(fā)模型,C#語言是.Net框架中新一代的開發(fā)工具。C#語言是一種現(xiàn)代的、面向?qū)ο蟮恼Z言,它簡(jiǎn)化了C++VB一樣容易使用。C#C++、JAVA語法非常相似,如果讀者用過C++和JAVA,學(xué)習(xí)C#語言應(yīng)是比較輕松的。用C#語言編寫的源程序,必須用C#語言編譯器將C#源程序編譯為中間語言(可執(zhí)行的機(jī)器碼,在程序運(yùn)行時(shí),必須由通用語言運(yùn)行環(huán)境(CommonLanguageRuntime,CLR)中的既時(shí)編譯器(JustInTime,JIT)將中間語言代碼翻譯為CPU可執(zhí)行的機(jī)器碼,由通用語言規(guī)范CnLanuageSpcfain,CLS:.Nt系統(tǒng)包括如下語言:C#、C++、B、#,他們都遵守通用語言規(guī)范。任何遵守通用語言規(guī)范的語言源程序,都可編譯為相同的中間語言代碼,由CR負(fù)責(zé)執(zhí)行。只要為其它操作系統(tǒng)編制相應(yīng)的CR自動(dòng)內(nèi)存管理:CLR內(nèi)建收集器,當(dāng)變量實(shí)例的生命周期結(jié)束時(shí),收集器負(fù)責(zé)收回不被使用的實(shí)例占用的內(nèi)存空間。不必像C和C++語言,用語句在堆中建立的實(shí)例,必須用語句釋放實(shí)例占用的內(nèi)存空間。也就是說,CLR具有自動(dòng)內(nèi)存管理功能。CLR負(fù)責(zé)執(zhí)行,因此異常處理方法是一致的,這在調(diào)試一指針的誤操作產(chǎn)生的錯(cuò)誤。CLR執(zhí)行中間語言代碼前,要對(duì)中間語言代碼的安全性、完bin中,運(yùn)行程序就自動(dòng)使用在bin文件夾中的組件或動(dòng)態(tài)聯(lián)接庫。由于不需要在表中,編寫控制臺(tái)應(yīng)用程dosdosWin2000及以后的操作系統(tǒng)中,dos操作系統(tǒng)運(yùn)行后,作為Win2000的一個(gè)任務(wù),在其中運(yùn)行的程序被稱作控制臺(tái)應(yīng)用程序。dosWin2000下運(yùn)行,也被稱作控制臺(tái)應(yīng)用程序。本節(jié)介紹使用SDK命令行工具編寫控制臺(tái)程usingSystem;//導(dǎo)入命名空間。//為C#語言新增解釋方法,解釋到本行結(jié)束 /*解釋開始,和C語言解釋用法相同staticvoidMain()//主程序,程 {Console.Wriine("請(qǐng)鍵入你的 }}usingSystem語句意義是導(dǎo)入System命名空間,C#中的using語句的用途與C++中#include語 {staticvoid{System.Console.Wriine("請(qǐng)鍵入你的:");}}字一律通過"."來連接。System是.Net平臺(tái)框架提供的最基本名空間之一,有關(guān)命名空 Main()方法必須使用static修飾。staticvoidMain()是類 程序所完成的輸入輸出功能是通過Cnsoe類來完成的,Cnsoe是在命名空間System中已經(jīng)定義好的一個(gè)類。onsole類有兩個(gè)最基本的方法Wiine和RedLie。ReaLine備Wriie如果在電腦上安裝了VisualStudio.Net,則可以在集成開發(fā)環(huán)境中直接選擇快捷鍵或FrameworkSDK,這樣才能夠運(yùn)行C#語言程序。.NetFrameworkSDK中內(nèi)置了C#的編譯器csc.exe,下面讓我們使用這個(gè)微軟提供令行編譯器對(duì)程序 令:d:回車,cdCharp回車,鍵入命令:編譯器csc.exe所在的路徑\csc如果一切正常e.cs文件將被編譯,編譯后生成可執(zhí)行文件e.exe。可以在操作系統(tǒng)命令提示符窗口運(yùn)行這個(gè)可執(zhí)行文件e.exe。運(yùn)行后,屏幕上出現(xiàn)一行注意,和我們使用過的絕大多數(shù)編譯器不同,在C#中編譯器只執(zhí)行編譯這個(gè)過程,而而是直接生成可執(zhí)行文件.exe或動(dòng)態(tài)庫.dll,C#編譯器中不需要包含器。使用VisualStudio.Net建立控制臺(tái)程C#項(xiàng)目",在"模板(T)"列表框中選擇"控制臺(tái)應(yīng)用程序",在"名稱(N)"編輯框中鍵入e1_2_1,在"位置(L)D:\csarpD:\csarp。也可以單擊"瀏覽"按鈕,在"打開文件"框中選擇文件夾。單擊"確定"按鈕,創(chuàng)建項(xiàng)目。出現(xiàn)1.2.2C界面。編寫一個(gè)應(yīng)用程序,可能包含多個(gè)文件,才能生成可執(zhí)行文件,所有修改usingSystem;namespacee1_2_1{//////Class1 classClass1{//////應(yīng)用程序的主點(diǎn)staticvoidMain(string[]{TODO: }}}CTRL+F51.2.1節(jié)運(yùn)行效果相同。屏幕上出現(xiàn)一行字符:"請(qǐng)鍵入你的:",提示您輸入。輸入任意字符并按下回車鍵,屏幕將C#語言是一種現(xiàn)代的、面向?qū)ο蟮恼Z言。面向?qū)ο蟪绦蛟O(shè)計(jì)方法提出了一個(gè)全新的概(數(shù)據(jù)成員及處理這些數(shù)據(jù)的相應(yīng)方法(函數(shù)成員封裝類的基本概類可以認(rèn)為是對(duì)結(jié)構(gòu)的擴(kuò)充,它和C中的結(jié)構(gòu)最大的不同是:類中不但可以包括數(shù)據(jù),相同特性和行為的事物的描述。例如,定義一個(gè)描述個(gè)人情況的類如下:usingclass//類的定義,class是關(guān)鍵字,表示定義一個(gè)類,是類{privatestringname="張三";//類的數(shù)據(jù)成員privateintage=12;//privatepublicvoidDisy()//類的方法(函數(shù)),顯示 }publicvoidSetName(stringName)//修改的方法(函數(shù) }publicvoidSetAge(int }}Console.Wriine(":{0},:{1}",name,age)的意義是將第二個(gè)參數(shù)變name{0age{1}位置,將第一個(gè)個(gè)人的特性和行為的描述,他的類型名為,和int,char等一樣為一種數(shù)據(jù)類型。用定義新數(shù)據(jù)類型類的方法把數(shù)據(jù)和處理數(shù)據(jù)的函數(shù)封裝起來。類的格式如下:class類名{類體protected、internal、private、和sealed,這些類修飾符以后介紹。類體用于定義類的類成員的存取控SetName()SetAge()修改,既它們只能按指定方法修改。類的對(duì)類僅是一個(gè)用戶新定義的數(shù)據(jù)類型,由它可以生成類的實(shí)例,C#語言叫對(duì)象。用如下方法類的對(duì)象:One=new();此語句的意義是建立類對(duì)象,返回對(duì)象地址賦值給類變量One。也可以分兩步創(chuàng)建類的對(duì)象:One;One=new();One雖然的是類對(duì)象地址,但不是C中的指針,不能象指針那樣進(jìn)行加減運(yùn)算,也不能轉(zhuǎn)換為其它類型地址,它是型變量,只能(代表)對(duì)象,具體意義參見以后章節(jié)。和C、C++One.Disy(),公有數(shù)據(jù)成員也可以這樣。注意,C#語言中不包括C++語言中類的構(gòu)造函數(shù)和析構(gòu)函作放到構(gòu)造函數(shù)中完成。構(gòu)造函數(shù)和類名相同,沒有返回值。例如可以定義類的構(gòu)public(stringName,intAge)//類的構(gòu)造函數(shù),函數(shù)名和類同名,無返回值 }當(dāng)用One=new("張五",20)語句生成類對(duì)象時(shí),將自~類名,無返回類型,也無參數(shù)。類的析構(gòu)函數(shù)為~()。C#中類的析構(gòu)函數(shù)不類的構(gòu)造函數(shù)的重在C#語言中,同一個(gè)類中的函數(shù),如果函數(shù)名相同,而參數(shù)的類型或個(gè)數(shù)不同,認(rèn)為用不同的構(gòu)造函數(shù)。例如可以定義類沒有參數(shù)的構(gòu)造函數(shù)如下public()//類的構(gòu)造函數(shù),函數(shù)名和類同名,無返回值 }用語句One=new("李四",30)生成對(duì)象時(shí),將調(diào)用有參數(shù)的構(gòu)函數(shù),而用語句One=new()生成對(duì)象時(shí),調(diào)用無參數(shù)的構(gòu)造函數(shù)。由使用類的完整的例下邊用一個(gè)完整的例子說明類的使用usingnamespacee1/ class privateStringname="";//類的數(shù)據(jù)成員privateintage=12;publicvoidDisy()//類的方法(函數(shù)),顯示 }publicvoidSetName(stringName)//指定修改的方法(函數(shù) }publicvoidSetAge(intAge)//指定修改的方法(函數(shù) }public(stringName,intAge)//構(gòu)造函數(shù),函數(shù)名和類同名,無返回 }public()//類的構(gòu)造函數(shù)重 }}class staticvoid }}}:: :: C#值類型和類型區(qū)在#語言中,值類型變量的是指定數(shù)據(jù)類型的數(shù)據(jù),值類型變量的值(或?qū)嵗?存儲(chǔ)在棧ack)中,賦值語句是傳遞變量的值。類型(例如類就是類型)的實(shí)例,也叫(MaadHeap)內(nèi)(ack)但,遞對(duì)的usingclassMyClass//類為類 publicint}class staticvoid }staticpublicvoid intv1=1;//值類型變量v1,其值1在棧(Stack)中intv2=v1;//v1的值(1)v2,v2=1,v1值不變。v2=2;//v2=2,v1值不變。MyClassr2=r1;//r1r2MyClass}}f1f1,v1C和C++語言,在堆中建立的對(duì)象,不使用時(shí)必須用語句釋放對(duì)象占用的空間。.Net系統(tǒng)CLR內(nèi)建收集器,當(dāng)對(duì)象的變量被撤銷,表示對(duì)象的生命周期結(jié)束,收集器負(fù)責(zé)收回不被使用的對(duì)象占用的空間。例如,上例中變量r1及r2是MyClass類對(duì)象的,在棧中,退出函數(shù)f1,r1和r2都不存在了,在堆中的MyClass類對(duì)象也就被收集器撤銷。也就是說,CLR具有自動(dòng)內(nèi)存管理功能。值類型變量分簡(jiǎn)單類型(Simple結(jié)構(gòu)類型(Struct枚舉類型(Enumeration結(jié)構(gòu)類不能被繼承,因此不能定義抽象結(jié)構(gòu),結(jié)構(gòu)成員也不能被權(quán)限控制字protected修飾,也不能用virtual和 口的方法基本一致。接口的概念見以后章節(jié)。下面例子定義一個(gè)點(diǎn)結(jié)構(gòu)point:usingstructpoint/ publicintx,y;//結(jié)構(gòu)中也可以構(gòu)造函數(shù)和方法,變量不能賦初}class staticvoid{pointpoint}簡(jiǎn)單類inti=int.MaxValue;strings=i.ToString()是正確的。即使一個(gè)常量,C#也會(huì)生成結(jié)構(gòu)類型的實(shí)例,因此也可以使用結(jié)構(gòu)類型的方法,例如:strings=13.ToString()是正確的。簡(jiǎn)System名空間中的名取值范1-12-24 48-88243.4E-81.7E-1.07.9簡(jiǎn)單類型使用方法和charc1=(char)10,charc='A',charc='\x0032';charc='\u0032'x=true或x=false枚舉類usingSystem;class enumDays{Sat,Sun,Mon,Tue,Wed,Thu,//使用VisualStudio.Net,enum語句添加在[STAThread]前邊staticvoidMain(string[]args) Daysintx=(int)Days.Tue;//x=3}}enumDays{Sat=6,Sun=7,Mon=1,Tue,Wed,Thu,Fri};中,不能是char類型。見下例:enumDays:byte{Sun,Mon,Tue,Wed,Thu,Fri,Sat值類型的初值和默認(rèn)構(gòu)造函類型和類中,數(shù)據(jù)成員的數(shù)值類型變量設(shè)置為默認(rèn)值,類型變量設(shè)置為null。型變量,例如:intj=newint()。請(qǐng)注意,用new語句并不是把int變量變?yōu)樽兞浚琷仍是類型分類:C#語言中預(yù)定義了一些類:對(duì)象類(object類)、數(shù)組類、字符串類等。當(dāng)然,C#語言類型變量無論如何定義,總是類型變量,不會(huì)變?yōu)橹殿愋妥兞俊#語言類型對(duì)象一般用運(yùn)算符new建立,用類型變量該對(duì)象。本節(jié)僅介紹對(duì)象類型(object類型)、字符串類型、數(shù)組。其它類型在其它節(jié)中介紹。對(duì)象類(object類用變量不可以基類的對(duì)象),因此,對(duì)一個(gè)object的變量可以賦予任何類型的值:intx=25;objectobj2=數(shù)組一個(gè)整型數(shù)組:int[]arr=newint[5],實(shí)際上生成了一個(gè)數(shù)組類對(duì)象,arr是對(duì)數(shù)組classTest{staticvoidintarr=newint[3];//用new運(yùn)算符建立一個(gè)3for(inti=0;i<arr.Length;i++)//arr.Length是數(shù)組類屬性,表示數(shù)組元素個(gè)數(shù)for(inti=0;i<arr.Length;i++)//數(shù)組第一個(gè)元素的下標(biāo)為0}}表示數(shù)組元素的個(gè)數(shù)。注意數(shù)組定義不能寫為C語言格式:intarr[]。程序的輸出為:arr[0]=0arr[1]=arr[2]=string[]a1;//一維string數(shù)組類變量a1string[,]a2;//二維string數(shù)組類變量a2=newstring[2,3];//用new建立二維數(shù)組對(duì)象,a2這個(gè)對(duì)string[,,]a3;//三維string數(shù)組類變量a3string[j2;//數(shù)組的數(shù)組,即數(shù)組的元素還是數(shù)組string[][][][]j3;int[]a1=newint[]{1,2,3};//一維數(shù)組,有3個(gè)元素。int[]a2=newint[3]{1,2,3};//此格式也正確int[]a3={1,2,3};//相當(dāng)于int[]a3=newint[,]a4=newint[,]{{1,2,3},{4,5,6}};//二維數(shù)組int[,]a5={{1,2,3},{4,5,6}}int[][]j2=newint[3][];//定義數(shù)組j2,有三個(gè)元素,每個(gè)元素都是一個(gè)數(shù)組j2[0]=newint[]{1,2,3};//定義第一個(gè)元素,是一個(gè)數(shù)組j2[1]=newint[]{1,2,3,4,5,6};/j2[2]=newint[]{1,2,3,4,5,6,7,8,字符串類(string類C#還定義了一個(gè)基本的類string,專門用于對(duì)字符串的操作。這個(gè)類也是在命名空間SystemSystem.Stringstringstring類的一些典型用法:strings;//定義一個(gè)字符串類型變量sstringFirstName="Ming";stringstringName=FirstName+""+LastName;//+表示連接兩個(gè)字符串stringSameName=Name;char[]s2={'計(jì)','算','機(jī)','科','學(xué)'};strings3=newString(s2);strings="ABC科學(xué)";inti=s.IndexOf("科"); strings1="abc";strings="abc";strings2="不相同"; strings="";strings1="不空";stringsstringsb=s.Substring(2,2);//從索引為2開始取2個(gè)字符,sb="字符",s內(nèi)容不變charsb1=s[0];//sb1='取'strings=stringsb=s.Remove(0,2);//從索引為0開始刪除2個(gè)字符,sb="字符串",sstrings=strings1=s.Insert(3,"軟件");//s1="計(jì)算機(jī)軟件科學(xué)",sstringsstrings1=s.Rece("計(jì)算機(jī)","軟件");//s1="軟件科學(xué)",s內(nèi)容不stringSchar[]s2=S.ToCharArray(0,S.Length);//屬性Lengthintstrings8=i.ToString();//s8="9"floatn=1.9f;stringstringstrings2=s.ToUpper();//把字符轉(zhuǎn)換為大寫,sstrings="A bc";輯器,鍵入string,將光標(biāo)移到鍵入的字符串string上,然后按F1鍵。類型轉(zhuǎn)在C會(huì)進(jìn)行隱式C#語言中類型轉(zhuǎn)換分為:oxigunboxnglonglonginti=(int)l;//如果超過int取值范圍,將產(chǎn)生異常1框inti=10;objectobj=i;//隱式加框操作,obj為創(chuàng)建的object對(duì)象的。intiobjectobj=object(i);classTest publicstaticvoid intn=200;objecto=n;}}消框操inti=10;intj=(int)objvoidDisy(Objecto)//注意,o為Object類 intx=(int)o;//消框}運(yùn)算符分三元運(yùn)算符:三元運(yùn)算符只有一個(gè):x?y:z類初級(jí)(x)x.yf(x)a[x]x++x--newtypeofsizeofchecked一元+-!~++x–x乘除*/加減+移位<<關(guān)系<><=>=is等式==邏輯與操作&邏輯^邏輯或操作|條件與操作條件或操作條件賦值=*=/=%=+=-=<<=>>=&=^=測(cè)試運(yùn)算符is操作符用于動(dòng)態(tài)地檢查表達(dá)式是否為指定類型。使用格式為:eisT,其中e是一個(gè)classTest{publicstaticvoid Console.Wriine(1isint);Console.Wriine(1isfloat);Console.Wriine(1.0fisfloat);Console.Wriine(1.0dis}}typeof運(yùn)算usingSystem;class staticvoid }}溢出檢查操作checkedclassClass1 staticvoidMain(string[] constintx=int.MaxValue; intz=x*2;//編譯時(shí)不產(chǎn)生編譯錯(cuò)誤,z=-2} intz1=(x*2);//編譯時(shí)會(huì)產(chǎn)生編譯錯(cuò)誤}}}new運(yùn)算intx=newint();//用new創(chuàng)建整型變量x,C1=new();//用new建立類對(duì)象。變量C1這個(gè)對(duì)象int[]arr=newint[2];//數(shù)組也是類,創(chuàng)建數(shù)組類對(duì)象,arr需注意的是,intx=newint()語句將自動(dòng)調(diào)用int結(jié)構(gòu)不帶參數(shù)的構(gòu)造函數(shù),給x賦初運(yùn)算符的優(yōu)先當(dāng)兩個(gè)有相同優(yōu)先級(jí)的操作符對(duì)操作數(shù)進(jìn)行運(yùn)算時(shí),例如x+yz,操作符按照出現(xiàn)的順xy-z按(x+y)zx=z按照x=(=z句、while語句、do…while語句、for語句、foreach語句、break語句、continue語句、goto語句、C語言的不同switchC和C+swich語句csebak語句,但#casebrek語或got個(gè)seaseswitchsbyebtesortshortuintlongulogcha、string類ase兩ceswitch語swichasecascsedefautefaultswihswtcht語defultusingclass staticvoid strings=System.Console.ReadLine(); case"1":case"3":casecase"7":case"8":casecase12"://共用一條語句casecase"4":case"6":casegotocase"11";//goto語句僅為說明問題,無此必要case"11":}}}foreachforeach語句是C#語言新引入的語句,C和C++中沒有這條語句,它借用VisualBasic中foreachin量的指定類型必須和表達(dá)式所代表的數(shù)組或其它集合中的數(shù)據(jù)類型一致。例子:usingclass publicstaticvoid int[]list={10,20,30,40};//數(shù)組foreach(intminlist)}}異常語類型的catch子句,該catch子句一般在事先不能確定會(huì)發(fā)生什么樣的異常的情況下使用,也異常語句捕捉和處理異常的機(jī)理是:當(dāng)trycach子句的順序查找異常類型。如果找到,執(zhí)行該ctch子句中的異常處理語句。如果沒有找到,執(zhí)行cathcath一檢查ctch子句,因此catch子句出現(xiàn)的順序是很重要的。無論是否產(chǎn)生異常,一定執(zhí)行y子句中的語句。異常語句中不必一定包含所有三個(gè)子句,因此異常語句可以有以下try–catch語句,可以有多個(gè)catchtry-finallytrycatch-finally語句,可以有多個(gè)catch語句usingSystemusingSystem.IO//使用文件必須名空間,有關(guān)讀寫文件概念見以后章publicclass publicstaticvoid StreamReadersr=null;//必須賦初值null,否則編譯不能通過{sr=File.OpenText("d:\\csarp\\test.txt");//可能產(chǎn)生異常strings;{s=sr.ReadLine();//可能產(chǎn)生異常}}catch(DirectoryNotFoundExceptione)//不存在指 }catch(FileNotFoundExceptione)// }catch(Exceptione)/{Console.Wriine("處理失敗} }}}tryfinally語trycatch類的繼派生類的格classclassEmployee://類是基 privatestringdepartment;//部門,新增數(shù)據(jù)成員privatedecimalsalary;//薪金,新增數(shù)據(jù)成員publicEmployee(stringName,intAge,stringD,decimal}publicnewvoidDisy()//覆蓋基類Disy()方法,注意new,不可用 Console.Wriine("部門:{0}薪金}}class staticvoidMain(string[] EmployeeOneEmployee=newEmployee("",30,"計(jì)算機(jī)系",2000);}}Emploee承的方法SNam、StAg,數(shù)據(jù)成na和g,即認(rèn)為基Eploee新dparment和salryDy()Eloyee類繼承了的nam和ageEploeena和ageSNam()和SAg修改。如果希Empoyeena和grttd。base關(guān)鍵在派生類的方法中調(diào)用基類中被派生類覆蓋的方法。參見上節(jié)雇員類Employee覆蓋基類成指Dsy()。派生類覆蓋基類成員不算錯(cuò)誤,但會(huì)導(dǎo)致編譯器發(fā)出警告。如果增加nw修飾符,表示認(rèn)可覆蓋,編譯器不再基:bse.isy()。C# 類的成類的成員類類成員修飾internal。private私有成員,私有數(shù)據(jù)成員只能被類內(nèi)部的函數(shù)使用和修改,私有函數(shù)成的私有成員和保護(hù)成員。internal內(nèi)部成員,內(nèi)部成員只能在同一程序集中的文件中才是靜態(tài)字段、實(shí)例字段、常量和只讀字用修飾符static的字段為靜態(tài)字段。不管包含該靜態(tài)字段的類生成多少個(gè)對(duì)象或根本法:實(shí)例名.實(shí)例字段名。用const修飾符的字段為常量,常量只能在中初始化,以后不能再修改。用readonly修飾符的字段為只讀字段,只讀字段是特殊的實(shí)例字段,它publicclass publicconstintintMax=int.MaxValuepublicintx=0;//publicreadonlyinty=0;//只讀字段publicstaticintcnt=0;//靜態(tài)字段publicTest(intx1,inty1)//構(gòu)造函數(shù) }publicvoidModify(intx1,int }}class staticvoidMain(string[] TestT1=new int }}屬在類的基本概念一節(jié)中,定義一個(gè)描述個(gè)人情況的類,其中字段nae和ae是私有字段,記錄和,外部通過公有方法Same和SAge修改這兩個(gè)私有字段?,F(xiàn)在:usingSystem;publicclass{privatestringP_name="";//P_name是私有字段privateintP_age=12;//P_age是私有字段publicvoidDisy()//類的方法,顯示 }publicstringName returnP_name;} }publicintAge returnP_age;} }}publicclass publicstaticvoid One=new(); strings=One intx=One }}在屬性的中,只有set器表明屬性的值只能進(jìn)行設(shè)置而不能讀出,只類的方方法類型形參2,...),可以有多個(gè)形參。不能使用C語言的形參格式。方法參數(shù)的種果參數(shù)類型是類型,例如是類的變量,則拷貝中的也是對(duì)象的,所以拷貝和實(shí)參同一個(gè)對(duì)象,通過這個(gè)拷貝,可以修改實(shí)參所的對(duì)象中的數(shù)據(jù)成員。有時(shí)在方法中,需要修改或得到方法外部的變量值,C語言用向方法傳遞實(shí)參指針來達(dá)Cre用要初。 usingclassg{publicinta=0;}//類定義classClass1 publicstaticvoidF1(refchari)//參 publicstaticvoidF2(chari publicstaticvoidF3(outchari publicstaticvoidF4(strings)// publicstaticvoidF5(ggg)//值參數(shù),形參類型為類 publicstaticvoidF6(refstrings)//參數(shù),形參類型為字符 staticvoidMain(string[] chara='c';F1(refa);//參數(shù),函數(shù)修改外部的a的值Charj;F3(outj);//輸出參數(shù),結(jié)果輸出到外部變量jgg1=newg();F6(refs1);//參數(shù),參數(shù)類型是字符串,s1為字符串變量}}classClass1 staticvoidF(paramsint[]args)//數(shù)組參數(shù),有params foreach(intiinargs)Console.Write("{0}",i);}staticvoidMain(string[] int[]a=F(10,20,30,40);//等價(jià)于F(newint[]F(newint[]60,70,80,90});//F();//等價(jià)于F(newintF(newint[]{});//實(shí)參為數(shù)組類,數(shù)組無元}}數(shù)組包含3個(gè)元素:12數(shù)組包含4個(gè)元素:10203040usingSystem;classClass1 staticvoidF(int[,]args)//值參數(shù),參數(shù)類型為數(shù)組類變量,無params說 foreach(intiinargs)Console.Write("{0}",i);}staticvoidMain(string[] int[,]a=//F(10,20,30,40);//F(newint[,]{{60,70},{80,90}});////F(newint[,}}數(shù)組包含4個(gè)元素:12345靜態(tài)方法和實(shí)例方用修飾符static的方法為靜態(tài)方法,不用修飾符static的方法為實(shí)例方法。不管usingpublicclass privatestaticintx=0;//靜態(tài)字段privateinty=1;//實(shí)例字段publicstaticvoidStaticMethod }publicvoidNoStaticMethod }}publicclass publicstaticvoid UseMethodm=new}}方法的重在C#語言中,如果在同一個(gè)類中定義的函數(shù)名相同,而參數(shù)類型或參數(shù)個(gè)數(shù)不同,認(rèn)為是不相同的函數(shù),僅返回值不同,不能看作不同函數(shù),這叫做函數(shù)的重載。前邊abs()求整型數(shù)絕對(duì)值,labs()求長(zhǎng)整型數(shù)絕對(duì)值,fabs()求浮點(diǎn)數(shù)絕對(duì)值。而在C#語言中,可以使用函數(shù)重載特性,對(duì)這三usingSystem;publicclassUseAbs publicintabs(intx return(x<0?-publiclongabs(longx)//{return(x<0?-publicdoubleabs(doublex)//{return(x<0?-}class staticvoidMain(string[] UseAbsm=newUseAbs();intx=-10;longy=-123;}}操作符重操作符重載是將C#語言中的已有操作符賦予新的功能,但與該操作符的本來含義不沖staticpublicoperator/、%、&、|、^。但也有一些操作符是不允許進(jìn)行重&、|nw、ypef、izef、is等。下邊的例子,定義一個(gè)復(fù)數(shù)類,并且希望復(fù)數(shù)的加減乘除用符號(hào)+、-、*usingclassComplex{privatedoubleRealprivatedoubleImag;publicComplex(doublex,doubley }staticpublicComplexoperator(Complexa)//重載一元操作符負(fù)號(hào),注意1 return(newComplex(-a.Real,-staticpublicComplexoperator plexb) return(newComplex(a.Real+b.Real,a.Imag+b.Imag));}publicvoidDisy() }class{staticvoidMain(string[]{Complexx=newComplex(1.0,2.0);Complexy=newComplex(3.0,4.0);Complexz=newComplex(5.0,7.0);}}this關(guān)鍵 因此P1.Disy()應(yīng)顯示 個(gè)對(duì)象,只有一個(gè)方法Dis 變量this記錄調(diào)用方法Disy()的對(duì)象,當(dāng)某個(gè)對(duì)象調(diào)用方法Disy()時(shí),this便該對(duì)象(記錄該對(duì)象的地址)。因此,不同的對(duì)象調(diào)用同一方法時(shí),方法便根據(jù)this所引用的不同對(duì)象來確定應(yīng)該哪一個(gè)對(duì)象的數(shù)據(jù)成員。this是類中隱含的變量,它是自動(dòng)被賦值的,可以使用但不能被修改。例如:P1.Disy(),this對(duì)象P1,顯示信息。P2.Disy(),this對(duì)象P2,顯示信息。在面向?qū)ο蟮南到y(tǒng)中,多態(tài)性是一個(gè)非常重要的概念。C#支持兩種類型的多態(tài)性,第一CclassA publicvoidF Console.Write("A.F");}publicvirtualvoidG()//虛方法{Console.Write("}classB:A//A類為B newpublicvoidF()//覆蓋基類的同名非虛方法F(),注意使用 Console.Write("publicoverridevoidG()//覆蓋基類的同名虛方法G(),注意使用 Console.Write("}class staticvoidF2(AaA)//注意,參數(shù)為A類變 staticvoid Bb=newB();Aa1=newA();Aa2=b;//允許基類變量派生類對(duì)象,a2派生類B對(duì)象bF2(b);//實(shí)參為派生類B對(duì)象,由于AaA=b,調(diào)用派生類B的函數(shù)G(),顯示B.G}}A.FA.FB.FA.GB.GB.G方法F(Aa)中,參數(shù)是A類類型,F(xiàn)(b)中形參和實(shí)參的關(guān)系是:AA=b,即基類變量A派生類對(duì)象b,aA.G()調(diào)用派生類B的函數(shù)G(),顯示BG。同理,F(xiàn)21)實(shí)參為基AA.G。 publicclass{privateStringname="";//類的數(shù)據(jù)成員privateintage=12;protectedvirtualvoid }public(stringName,intAge)//構(gòu)造函數(shù),函數(shù)名和類同名,無返回 }staticpublicvoidDisyData(a)//靜態(tài)方 }}publicclassEmployee://類是基 privatestringdepartment;privatedecimalsalary;publicEmployee(stringName,intAge,stringD,decimal }protectedoverridevoidDisy()//重載虛方法,注意用 Console.Wriine("部門:{0}薪金:{1}",}}class staticvoidMain(string[] EmployeeOneEmployee=newEmployee("",40,"財(cái)務(wù)部.DisyData(OneEmployee);//顯示派生類數(shù)}:,:,部門:財(cái)務(wù)部薪金 classFigure protecteddoublex=0,y=0;publicFigure(doublea,doubleb) } voidArea()}classSquare:Figure///類Square publicSquare(doublea,doublepublicoverridevoidArea()//不能使用new,必須用 }classCircle:Figure///類Circle publicCircle(doublepublicoverridevoid }class staticvoidMain(string[] Squares=newSquare(20,30);Circlec=newCircle(10);}}提出了一個(gè)密封類(sealedclass)的概念,幫助開發(fā)人員來解決這一問題。C#還提出了密封方法(sealedmethod)的概念。方法使用sealed修飾符,稱該方法是一接與類一樣,在接口中可以定義一個(gè)和或個(gè)方法、屬性、索引指示器和。但與類不同的是,接口中僅僅是它們的,并不提供實(shí)現(xiàn)。因此接口是函數(shù)成員的集合。如果類接屬性接口修飾符interface接口名:基接口{接口體}publicinterfacestringthis[intindex]{get;set;}//索引指示器eventEventHandlerE;//voidF(intvalue);//方法stringP{get;set;}//屬性}接口的繼usingSystem;interface void}interfaceITextBox:IControl//繼承了接口Icontrol的方法 voidSetText(string}interfaceIListBox:IControl//繼承了接口Icontrol的方法 voidSetItems(string[]}interface} 類對(duì)接口的實(shí)usingpublicinterfaceI_Salary decimalSalary// }}public{?參見1.9.2屬性 }publicclassEmployee:,I_Salary//類是基類,I_Salary是接privatedecimalsalary;publicnewvoidDis Console.Wriine("薪金:{0}}publicdecimal returnsalary;} }}publicclass publicstaticvoid{EmployeeS=newEmployee();}}代表(delegate)屬性集修飾符delegate修飾符包括new、public、protected、internal和private。例如我們可以一個(gè)能代表返回類型為int,無參數(shù)的函數(shù)的代表類型,類型名為MyDelegate,類型如下:publicdelegateintMyDelegate();//只能代表返回類型為int,usingSystem;delegateintMyDelegate();//一類型,類型名為MyDelegate,注意位publicclass publicintInstanceMethod()//非靜態(tài)的方法,注意方法為int return0;}staticpublicintStaticMethod()//靜態(tài)方法,注意方法為int return0;}}publicclass staticpublicvoidMain MyClassp=newMyDelegated=newMyDelegate(p.InstanceMethod);//參數(shù)是被代表的方法d=newMyDelegate(MyClass.StaticMethod);//參數(shù)是被代表的方法}} 驅(qū)Windows操作系統(tǒng)把用戶的動(dòng)作都看作消息,C#中稱作 。Windows操作系統(tǒng)負(fù)責(zé)統(tǒng)一管理所有的 C#Windows應(yīng)用程序。組件本質(zhì)上是類。在組件類中,預(yù)先定義了生,將自動(dòng)調(diào)用相應(yīng)的預(yù)定義函數(shù)。例如,按鈕類中定義了單擊Click和單擊 publicdelegatevoidEventHandler(objectsender,EventArgse);//代表類型//EventHandler變量可以代表沒有返回值,參數(shù)為(objectsender,EventArgse)的函數(shù)publicclassButton:Control//定義一個(gè)按鈕類Button組件publiceventEventHandlerClick;//一 protectedvoidOnClick(EventArgs }publicvoid }是類Btton的一個(gè),同時(shí)也是代表類型Eentndler的變量,如令ick代表程序員編制的處理函數(shù),lick發(fā)生時(shí),將執(zhí)行程序員編制的處理函數(shù),完成程序員希望完成的工作。如果lick為nullnClik函數(shù)將不做任何事情。下節(jié)將介紹用何種語ic 的預(yù)訂和撤publicclassLoglog:Form//登錄框 ButtonOkButton;ButtonCancelButton;publicLoglog()//構(gòu)造函 OkButton=newButton();//建立按鈕對(duì)象OkButton.Click+=newEventHandler(OkButtonClick);CancelButton=newButton();//建立按鈕對(duì)象CancelButtonCancelButton.ClicknewEventHandler(CancelButtonClick);}voidOkButtonClick(objectsender,EventArgse)//程序員編制的處理函}voidCancelButtonClick(objectsender,EventArgs}}法聯(lián)系在一起:OkButton.Click+=newEventHandler(OkButtonClick),該語句的意義是使句實(shí)現(xiàn):OkButton.Click-=newEventHandler(OkButtonClick),這時(shí),OkButton.Click就這兩條語句的用法。使用VisualStudio.Net集成環(huán)境可以自動(dòng)建立這種聯(lián)系,在自動(dòng)生成 usingSystemclassTeam string[]s_name=newstring[2];//定義字符串?dāng)?shù)組,記錄小組人員publicstringthis[intnIndex]//索引指示器,this為類Team類的對(duì)象 return} s_name[nIndex]=value;//value}}}class publicstaticvoid Teamt1=newTeam();Console.Wriine("{0},{1}",t1[0],}}命名空命名空間usingnamespaceN1//N1為全局命名空間的名稱,應(yīng)是using namespaceN2//命名空間N1的成員 classA//在N2 classB void}}namespaceN1.N2//類A、B在命名空間N1.N2 class classB void}namespaceN1.N2//類A在命名空間N1.N2 class void}namespaceN1.N2//類B在命名空間N1.N2 class void}命名空間使usingN1.N2; Aa=new}usingN1.N2實(shí)際上是告訴應(yīng)用程序到哪里可以找到類A。請(qǐng)讀者重新看一下1.2.1須這段程序是非安全(unsafe)的??梢灾付ㄒ粋€(gè)方法是非安全的,例如:unsafevoid){?碼是非安全的,例如:unsafe{int*p2=p1;int*p3=p4;}。在編譯時(shí)要采用如下格式:csc要編譯的C#源程序/unsafe。習(xí) 用語句strings=Console.ReadLine()輸入 還是小,用switch語句實(shí)現(xiàn)。char第二章Windows編程的基礎(chǔ)窗WindowsWindows的系驅(qū)動(dòng)(消息驅(qū)動(dòng)Windows應(yīng)用程序和dos程序(控制臺(tái)程序)的最大不同是驅(qū)動(dòng)方式工作,也叫消則CPU一直執(zhí)行鍵盤輸入程序,等待用戶輸入,即dos程序獨(dú)占外設(shè)和CPU。Windows一個(gè)程序獨(dú)占外設(shè),如鍵盤、鼠標(biāo)等,所有運(yùn)行程序共享外設(shè)和CPU,各個(gè)運(yùn)行程序都要隨 等。Windows操作系統(tǒng)統(tǒng)一負(fù)責(zé)管理所有的,把 隊(duì)Windows把用戶的動(dòng)作都看作,Windows操作系統(tǒng)負(fù)責(zé)管理所有的,發(fā)生后,這些被放到操作系統(tǒng)隊(duì)列中,Windows操作系統(tǒng)從操作系統(tǒng)隊(duì)列中逐一取注視窗Windows個(gè)窗口是活動(dòng)的,我們能從窗口的標(biāo)題欄的顏色來識(shí)別一個(gè)活動(dòng)窗口,這個(gè)窗口接收Windows操作系統(tǒng)發(fā)來的大部分的。這個(gè)應(yīng)用程序的窗口被稱為注視(活動(dòng))窗口。Windows編程接口API(ApplicationProgrammingInterface)Windows98、2000XP接口。程序員用CAPIWindows應(yīng)用程序,但大量的程序代碼必須由程序員自己編寫,而API函數(shù)非常龐大,給編程者帶來很大的。MFC類用API函數(shù)編寫Windows應(yīng)用程序是十分的。微軟的VC++6.0用類對(duì)API函數(shù)進(jìn)行了封裝,為編程提供了MFC類庫。使用MFC類庫簡(jiǎn)化了Windows應(yīng)用程序的編制。但是,MFC類組件了。組件編程的工具有很多,例如:VB6.0、VB.Net、C#、C++Builder、Java、Delphi.Net.Net系統(tǒng)為編制Windows應(yīng)用程序、Web應(yīng)用程序、Web服務(wù),在.Net框架(.Net還是開發(fā)Web應(yīng)用程序,采用相同的組件名稱,組件具有類似的屬性、方法和,開發(fā)模式Windows98、2000XP.NetC#程序,必須安裝.NetFrameWork。.NetFrameWork1.0版本和1.1版本。Windows應(yīng)用程序和控制臺(tái)應(yīng)用程序的基本結(jié)構(gòu)類似,程序的執(zhí)行總是從Main()方法Main()Windows應(yīng)用程序使用圖形界面,一般有一個(gè)窗口(Form),采用驅(qū)動(dòng)方式工作。本節(jié)介紹Windows應(yīng)用程序的基本結(jié)構(gòu)。最簡(jiǎn)單WindowsusingSystem;//引入命名空間usingSystem.Windows.Forms;publicclassForm1:Form//類定義 staticvoidMain()/ Application.Run(new}} 幕上輸入一行命令:d:回車,cdCharp回車,鍵入命令: \csc/t:winexe/r:system.dll,System.Windows.Forms.dllg.batg.bat,和在命令行提示符鍵入命令效果相同。以上方法在FrameWorkSDK1.0中實(shí)現(xiàn)。如果一切正常e1.cs文件將被編譯,編譯后生成可執(zhí)行文件e1.exe。運(yùn)行可執(zhí)可以在Form1類中定義新的變量,由于主窗體關(guān)閉,程序也就結(jié)束了,因此定義在主窗體Form1類中的變量的生命周期和程Form1Form1的用戶區(qū)顯示出Form1中生成控件對(duì)象,也就是把控件放到窗體中。如在窗體中增加了一個(gè)按鈕(Button)控件,單擊按鈕,將產(chǎn)生單擊按鈕,完成一定功能,下例說明了如何usingusingSystem.Windows.Forms;publicclassForm1:Form{Buttonbutton1;//生成Button類變量,和應(yīng)用程序有相同生命周publicForm1({//下句修改主窗體標(biāo)題,不指明屬性(方法)Form1類的屬性(方法)button1=newButton();//生成Button類對(duì)象button1.Text="確定"button1Text,//下句指定button1_Click函數(shù)是按鈕單擊的單擊處理函數(shù)button1.Click+=newSystem.EventHandler(button1_Click);}staticvoid Application.Run(new}privatevoidbutton1_Click(objectsender,System.EventArgs}}一個(gè)變量button1,和主窗體Form1有相同的生命周newButton類對(duì)象,第用VisualStudio.Net建立Windows應(yīng)用程以上所做的工作,都是一些固定的工作,可以使用VisualStudio.Net自動(dòng)建立,下面介紹使用VisualStudio.Net創(chuàng)建Windows應(yīng)用程序的具體步驟。C#項(xiàng)目",在"模板(T)"列表框中選擇"Windows應(yīng)用程序",在"名稱(N)"編輯框中鍵入e2_4_2,在"位置(L)"編輯框中鍵入D:\csarp。也可以單擊"瀏覽"按鈕,在打開文件2.4.2A界面。生成一個(gè)空白窗Form1.csVisualStudio.NetWindows應(yīng)用程序的最基本usingSystem;//引入命名空間usingSystem.Drawing;usingSystem.Collections; usingSystem.Windows.Forms;usingSystem.Data;namespacee2_4_2//定義命名空間,///為解 //此處可定義其它//////Form1 說明///publicclassForm1:System.Windows.Forms.Form//Form1類定 //此處可定義自己的變量,這些變量和運(yùn)行程序生命周//////必需的設(shè)計(jì)器變量/// ponentModel.Containercomponentsnull;publicForm1()//構(gòu)造函數(shù) //Windows窗體設(shè)計(jì)器支持所必ponent();//此函數(shù)系統(tǒng)自動(dòng)生成,不要修改,該函數(shù)做一些初始化//TODO: ponent調(diào)用后添加任何構(gòu)造函數(shù)代//在構(gòu)造函數(shù)增加自己的初始化代碼,必須放 ponent()之}//////清理所有正在使用的資///protectedoverridevoidDispose(booldisposing{if(disposing{if(components!={}}base.Dispose(disposing}#regionWindowsFormDesignergenerated//////設(shè)計(jì)器支持所需的方法-不要使用代碼編輯器///此方法的內(nèi)容///private //此函數(shù)系統(tǒng)自動(dòng)生成,不要修改函數(shù)內(nèi)容,函數(shù)做一些初始//this.AutoScaleBaseSizenewSystem.Drawing.Size(614);this.Size=newSystem.Drawing.Size(292,273);this.Name="Form1";//this是Form1窗體對(duì)象this.Text=}//////應(yīng)用程序的主點(diǎn)staticvoidMain()//程 函數(shù),一般不修{Application.Run(new}}//程 函數(shù)之后可定義自己的方法、屬性}}下邊在窗體中增加一個(gè)按鈕,并為按鈕增加單擊函數(shù)。單擊圖2.4.2A中標(biāo)題為控件需要使用工具箱窗口,若看不到,可以用"視圖"|"工具箱"菜單項(xiàng)打開這個(gè)窗口(見2.4.2BWindowsButtonButton控件放到Form1窗體中。選中按鈕控件,屬性窗口改Button的Text屬性值為"確定"。單擊屬性窗體上的第4個(gè)圖標(biāo),打開窗口(見圖2.4.2B右圖),顯示Button控件所能響應(yīng)的所有 白處,增加單擊處理函數(shù)。usingusingSystem.Drawing;usingSystem.Collections; usingSystem.Windows.Forms;usingSystem.Data;namespacee2_4_2{//////Form1 說明///publicclassForm1:{privateSystem.Windows.Forms.Buttonbutton1;//定義Button//////必需的設(shè)計(jì)器變量/// ponentModel.Containercomponents=null;publicForm1(){//Windows窗體設(shè)計(jì)器支持所必//TODO: ponent調(diào)用后添加任何構(gòu)造函數(shù)代}//////清理所有正在使用的資///protectedoverridevoidDispose(booldisposing{if(disposing{if(components!={}}base.Dispose(disposing}#regionWindowsFormDesignergenerated//////設(shè)計(jì)器支持所需的方法-不要使用代碼編輯器///此方法的內(nèi)容///private { this.button1=newSystem.Windows.Forms.Button // this.button1.Location=newSystem.Drawing.Point(96,56 this.button1.Name= this.button1.Size=newSystem.Drawing.Size(72, this.button1.TabIndex= this.button1.Text="確定 this.button1.Click this.button1.Click+=newSystem.EventHandler(this.button1_Click//this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);this.Size=newSystem.Drawing.Size(292,273); this.Controls.AddRange(newSystem.Windows.Forms.Control[]{this.button1});this.Name="Form1";this.Text=}//////應(yīng)用程序的主點(diǎn)///</summary>{Application.Run(new} privatevoidbutton1_Click(objectsender,System.EventArgs }}n1的屬性,第四步增加bun1的處理函數(shù),函數(shù)buton_Clck)是處理函數(shù),tis.uttn1.ick+=newSytemEveHandlr(tis.uttn1_ick)把按鈕Butto1的lickbuton1Cli一在函方案(Solution)和項(xiàng)目一個(gè)應(yīng)用(ppcn)可能包括一個(gè)或多個(gè)可執(zhí)行程序,例如,學(xué)生信息管理系統(tǒng),可了方便管理項(xiàng)目和項(xiàng)目所在的方案,VisualStudio.Net理器窗口(圖2.4.3)。它可以為我們顯示一個(gè)方案的樹形結(jié)構(gòu),以及它所包含的項(xiàng)目及項(xiàng)目中的文件。這里的項(xiàng)目是Windows應(yīng)用程序項(xiàng)目,和后邊的Web項(xiàng)目有些區(qū)別。e2_4_2件夾e2_4_2中,共有兩個(gè)文件夾和7個(gè)文件,它們的用途如下:bin文件夾:其中包含Debug子文件夾,生成帶調(diào)試信息的可執(zhí)行C#程序。還可以包含Release子文件夾,生成不帶調(diào)試信息的可執(zhí)行C#程序。不用打開VisualStudio.NetC#程序,就可運(yùn)行這個(gè)程序。obj文件或DLL文件中的信息,如標(biāo)題、描述、公司名等。一般用工具修改該程序,不要Form1resx
VisualStudio.Net打開該解決方案,e2_4_2e2_4_2件(擴(kuò)展名為csproj),或者使用"文件"|"打開項(xiàng)目"菜單VisualStudio.Net的項(xiàng)目文件和解決方案文件習(xí)第三章常用控件和類的VisualStudio.NetVS.NetWindowsVS.NetVS.Net完成。大部分控件,例如Label、Button、TextBox等,都是Control類的派生類。Control類定義了這些派生類控件通用的一組屬性和方法,以下是Control類的一些常用屬性:Name:控件的名稱,區(qū)別控件類不同對(duì)象的唯一標(biāo)志。例如用語句Buttonbutton1=newButton()Button類對(duì)象,那么這個(gè)ButtonNamebutton1。Lan:表示控件對(duì)象在窗體中的位置。本屬性是一個(gè)結(jié)構(gòu),結(jié)構(gòu)中有兩個(gè)變量,x和x和yx軸向右為正方向,y軸向下為正方向,以像素為單位。修改Lcn,可以移動(dòng)控件的bun1.Lan=nwPon(100,200)butn1Top,可以移動(dòng)控件的位置,例如:button1.Left=100button1Size:本屬性是一個(gè)結(jié)構(gòu),結(jié)構(gòu)中有兩個(gè)變量,WidthHeight分別代表控件對(duì)象的寬和高,例如可用語句button1.Size.Width=100修改Button控件對(duì)象button1的寬。Cursor:鼠標(biāo)移到控件上方時(shí),鼠標(biāo)顯示的形狀。默認(rèn)值為Defut,表示使用默認(rèn)鼠標(biāo)FormForm類對(duì)象具有Windows應(yīng)用程序窗口的最基本功能。它可以是框、單文檔或多文檔應(yīng)用程序窗口的基類。FormForm菜單控件、工具條控件等等,還可以放置子窗體。Form類常用屬性、方法和如下:屬性屬性TextAcceptButton:記錄一個(gè)按鈕對(duì)象的Name屬性值,用戶鍵入回車時(shí),等效單擊這屬性CancelButton:記錄一個(gè)按鈕對(duì)象的NameESC鍵時(shí),等效單擊這屬性izeBox:窗體標(biāo)題欄右側(cè)最大化按鈕是否可用,設(shè)置為false,按鈕不可用MiniMizeBox:窗體標(biāo)題欄右側(cè)最小化按鈕是否可用,設(shè)置為false,按鈕不可用。如果屬性izeBox和MiniMizeBox都設(shè)置為false,將只有關(guān)閉按鈕。在不希望用方法Close()Hide():隱藏窗體,但不破壞窗體,也不釋放資源,可用方法Show()(Label)控果和標(biāo)記窗體上的對(duì)象。一般不用于觸發(fā)。Label控件常用屬性如下:AutoSize:控件大小是否隨顯示字符串長(zhǎng)度自動(dòng)調(diào)整,默認(rèn)值為falseForeColorLabel例子e3_3:VS.Net2.4.2B左圖)中"Windows"LabelForm1LabelLabel任意位置,并可拖動(dòng)Label邊界改變控件的大小。Labeltext,把它的屬性值由―Lab1‖修改為―我的第一個(gè)程序‖。接著在屬性窗口中選中Font屬性,單擊Font屬性右側(cè)標(biāo)題為"?"的按鈕,打開"字體"框,在框中可以修改Label控件顯示字符串的字體名稱和字號(hào)等。也可以單擊Font屬性左邊的+號(hào),出現(xiàn)子屬性,可編輯這些子屬性,編輯完成后,單擊Font屬性左邊的-號(hào),隱藏FontForeColorLabel控件顯示VS.Net,再啟動(dòng)。用菜單"文件"|"打開項(xiàng)目"菜單項(xiàng)打開剛才關(guān)閉的項(xiàng)目文件(擴(kuò)展sln)。應(yīng)能看到剛才關(guān)閉的設(shè)計(jì)界面。必須打開項(xiàng)目文件,才能完成編譯工作。按鈕(Button)控Button控件常用屬性和如下屬性Text例子e3_4:本例說明如何用程序修改控件屬性,使用控件方法,如何增加處理函數(shù)。本例在窗口中顯示一行文字,增加2個(gè)按鈕,單擊標(biāo)題為―紅色―的按鈕,把顯示的文本顏Text,使標(biāo)題分別為紅色、黑色、退出。設(shè)計(jì)好的選中標(biāo)題為―紅色―的按鈕,打開窗口(見圖2.4.2B右圖),顯示該控件所能響應(yīng)的所有,其中左側(cè)為事privatevoidbutton1_Click(objectsender,System.EventArgs }//label1是控件的名字(labelName屬性)單擊(Click)標(biāo)題為―黑色―的按鈕的處理函數(shù)如下privatevoidbutton2_Click(objectsender,System.EventArgs 單擊(Click)標(biāo)題為―退出―的按鈕的處理函數(shù)如下privatevoidbutton3_Click(objectsender,System.EventArgs 處理函數(shù)一般有兩個(gè)參數(shù),第一個(gè)參數(shù)(objectsender)為產(chǎn)生該對(duì)象的屬性希望例子e3_4中標(biāo)題為―紅色―的按鈕和標(biāo)題為―黑色―的按鈕使用同一個(gè)單擊按鈕處理privatevoidbutton1_Click(objectsender,System.EventArgs }
然后選中標(biāo)題為―黑色―的按鈕,打開窗體(見圖2.4.2B右圖),選中Click,從其右側(cè)下拉列表中選擇標(biāo)題為―紅色―按鈕的處理函數(shù):button1_Click,這樣兩個(gè)按處理函數(shù)第二個(gè)參數(shù)(System.EventArgse)代表的一些附加信息,不同,所MouseButtons.Left,表示單擊了鼠標(biāo)左鍵。文本框(TextBox)控屬性TextAcceptsReturn:MultiLine=truetrue,鍵入回車鍵,執(zhí)行換行操作;為false,鍵入回車鍵,相當(dāng)于單擊窗體中的默認(rèn)按鈕。TextChanged:在文本框中輸入或編輯了數(shù)據(jù),文本內(nèi)容發(fā)生變化時(shí)發(fā)出的。例子e3_6:本例要求用戶在編輯框中輸入兩個(gè)乘數(shù),textBox2、textBox3Text標(biāo)題為―求積―的按鈕的單擊處理函數(shù)如下privatevoidbutton1_Click(objectsender,System.EventArgs floatss,ee;}標(biāo)題為―清空―的按鈕的單擊處理函數(shù)如下privatevoidbutton2_Click(objectsender,System.EventArgs }privatevoidbutton3_Click(objectsender,System.EventArgs 編譯,運(yùn)行,在文本框textBox1,textBox2分別輸入被乘數(shù)2和乘數(shù)3,單擊標(biāo)題為―求積―的按鈕,textBox3中顯示6,單擊標(biāo)題為―清空―的按鈕,三個(gè)文本框被清空,單擊標(biāo)ConvertConvert.ToSingle(textBox1.Text)把字符串textBox1.TextConvert.ToString(3.14)把單浮點(diǎn)數(shù)3.14轉(zhuǎn)換為字符串。其它轉(zhuǎn)換函數(shù)還有:ToInt16(stringToInt32(string)ToByte(char)ToChar(Byte)ToChar(int16RadioButton是單選按鈕控件,多個(gè)RadioButton控件可以為一組,這一組內(nèi)的RadioButton控件只能有一個(gè)被選中。GroupBoxTextRadioButtonGroupBoxRadioButton控件是一組。有一些特性是互斥的,例如,選擇這類特性可用RadioButton和GroupBox控件。GroupBox控件常用屬性屬性只有一個(gè),屬性TextGroupBoxRadioButton控件常用屬性和如下屬性Text屬性CheckedtruefalseCheckedChanged:?jiǎn)芜x按鈕有被選中和不被選中兩種狀態(tài),該是單選按鈕狀態(tài)例子e3_8:該例用RadioButton控件修改Label控件字符串為"宋體"的RadioButton控件的屬性Checked=true。設(shè)計(jì)好的界面如右圖。privatevoidradioButton1_CheckedChanged(objectsender,System.EventArgs label1.Font=newFont("宋體privatevoidradioButton2_CheckedChanged(objectsender,System.EventArgs label1.Font=newFont("黑體}privatevoidradioButton3_CheckedChanged(objectsender,System.EventArgs label1.Font=newFont("楷體}按鈕只能選一個(gè),既只能選一種字體。考慮一下,是否可用Click。FontFont("黑體",9),用法還可參考例子e3_8。第二個(gè)是newFont(字體名稱,字號(hào),字體風(fēng)格),enum BoldItalic3,//黑斜體 label1.Font=newFont(或者:label1.Font=newFont("黑體label1.Font=newFont或者:label1.Font=newFont("黑體修改其它字體風(fēng)格的代碼類似,請(qǐng)讀者自己實(shí)現(xiàn)。用法還可參考例子e3_11多選框(CheckBox)控CheckBoxCheckBoxGroupBox一組內(nèi)的CheckBox控件可以多選,不選或都選??捎脕磉x擇一些可共存的特性,例如一個(gè)人的。CheckBox控件常用屬性和如下:屬性Text屬性Checkedtrue表示多選框被選中,為falseCheckedChanged:多選框控件有被選中和不被選中兩種狀態(tài),該是多選框狀態(tài)單擊CheckBox控件,改變選擇,用Label控件顯示所選擇的。實(shí)現(xiàn)步驟如下:――屬性Text分別為:音樂、文學(xué)。設(shè)計(jì)界面如下圖。privatevoidcheckBox1_CheckedChanged(objectsender,System.EventArgs Stringtext1="你的是:";}將標(biāo)題為"文學(xué)"的多選框控件的CheckedChanged處理函數(shù),設(shè)置為標(biāo)題為"音樂"的多選框控件的CheckedChanged處理函數(shù),具體步驟見3.5節(jié)。再選中標(biāo)題為"文學(xué)"的多選框控件,控件將顯示"你的是:音樂文學(xué)",…。e3_10B:該例同上例,但按標(biāo)題為"音樂"和"文學(xué)"的多選框控件被選中的順序在中顯示,實(shí)現(xiàn)步驟如下:(4)標(biāo)題為"音樂"的多選框控件CheckBox1的CheckedChanged處理函數(shù)如下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 褪黑素對(duì)不同灌水量下日光溫室延后栽培葡萄的生理調(diào)控效應(yīng)
- 基于小樣本學(xué)習(xí)的家用機(jī)器人老人跌倒行為識(shí)別研究
- 科技企業(yè)如何構(gòu)建有效的ESG戰(zhàn)略框架
- 資源編排視角下中聯(lián)重科連續(xù)并購的價(jià)值創(chuàng)造研究
- 2025年戊二酸二甲酯項(xiàng)目合作計(jì)劃書
- 睡美人文獻(xiàn)的論文特征及其文獻(xiàn)引證特征研究
- 糯米椴種子休眠機(jī)制和解除方法研究
- 醫(yī)學(xué)級(jí)潤(rùn)足霜生產(chǎn)行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 無創(chuàng)血流動(dòng)力學(xué)檢測(cè)對(duì)射血分?jǐn)?shù)保留的心力衰竭的應(yīng)用研究
- 知識(shí)產(chǎn)權(quán)保護(hù)促進(jìn)企業(yè)發(fā)展與創(chuàng)新
- 中國(guó)糖尿病防治指南(2024版)解讀-1
- 2024年計(jì)算機(jī)二級(jí)WPS考試題庫(共380題含答案)
- 2024年德州職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫
- 跨學(xué)科實(shí)踐活動(dòng)10調(diào)查我國(guó)航天科技領(lǐng)域中新型材料新型能源的應(yīng)用課件九年級(jí)化學(xué)人教版(2024)下冊(cè)
- 代理分銷銷售協(xié)議書
- 2024年江蘇農(nóng)牧科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫參考答案
- 2024綜合基礎(chǔ)知識(shí)考試題庫及解析(146題)
- 中國(guó)類風(fēng)濕關(guān)節(jié)炎診療指南(2024版)解讀
- 《社會(huì)治理概論》課程教學(xué)大綱
- 讀書分享《非暴力溝通》課件(圖文)
- 鉗工實(shí)訓(xùn)安全
評(píng)論
0/150
提交評(píng)論