版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
副程式與函式1副程式(Subroutine)EX:CH04-01'副程式SubMySubA()DimdtAsDate'取得現在時間dt=System.DateTime.Now.ToString'顯示Console.WriteLine(dt)EndSub請注意,副程式需要有一個名字,命名規則與變數相同。叫用.NET本身提供的系統函式,來取得時間顯示目前的時間。2呼叫副程式EX:CH04-01'主程式
SubMain()'顯示
Console.WriteLine("Hello")'呼叫副程式
MySubA()'顯示
Console.WriteLine("Howareyou?")'暫停
Console.ReadKey()EndSub利用Call指令來呼叫剛才建立好的副程式3Practice(練習)SubMain()foriasinteger=1to10console.writeline(i)NextPause()EndSubSubPause()console.writeline()console.write(“====>程式暫停中,請按任意鍵繼續<====“>console.readkey()EndSub4Function(函式)Function的寫法
FunctionMax(ByValaAsInteger,ByValbAsInteger)AsIntegerIfa>bThen
ReturnaEndIfIfa<bThen
ReturnbEndIf'如果兩者相等,則傳回Return0EndFunction這邊設定的叫做『參數』Function也要有名字Return指令用來結束Function並把值傳回請特別注意,Function需要指定回傳值的型別5傳回值副程式與函式最大的不同函式有傳回值FunctionMax(ByValaAs
Integer,ByValbAs
Integer)As
Integer….Returna6Parameters(參數傳遞)FunctionMax(ByValaAs
Integer,ByValbAs
Integer)As
Integer參數一參數二參數傳遞方式7呼叫函式DimretAs
Integerret=Max(35,73)宣告一個變數來接收函式的回傳值8Example練習範例CH04-03建立一個函式,讓使用者輸入圓的的半徑,該函式就傳回圓的面積提示:假設半徑為r,則圓面積的計算公式為:r*r*3.14159建立一個函式,讓使用者輸入矩形的長跟寬,該函式就傳回矩形的面積9參數傳遞方式比較ByValv.s.ByRefCallbyvalue(傳值呼叫)傳遞變數的值Callbyreference(傳址呼叫)傳遞變數在記憶體位置10範例EX:CH04-06
SubMain()Dima,bAsIntegera=10b=20Swap(a,b)Console.WriteLine("變數a:"&a)Console.WriteLine("變數b:"&b)Pause()EndSubFunctionSwap(ByRefn1AsInteger,ByRefn2AsInteger)AsIntegerDimcAsInteger
c=n1n1=n2n2=cEndFunction主程式呼叫Swap時,以ByRef方式來傳入a,b兩個參數…請注意,以ByRef傳入的n1,n2參數,就是主程式中的a,b,不只是接收a,b的值,是完全等於a,b11絃外之音Callbyreference另類的回傳值12BubbleSort(泡沫排序法)13ExampleSubMain() Dima()AsInteger={4,15,23,1,57,21,722,3,6,89,24,5,62} ‘排序 Sort(a) ‘顯示 ForiAsInteger=0ToUBound(a) Console.Write(a(i)&",") Next console.writekey()EndSub‘排序SubSort(ByRefarr()AsInteger) ForxAsInteger=0ToUBound(arr) ForyAsInteger=x+1ToUBound(arr) Ifarr(x)>arr(y)Then S(x),arr(y)) Next NextEndSub
‘替換兩個變數中的值SubSn1AsInteger,ByRefn2AsInteger) DimcAsInteger c=n1 n1=n2 n2=cEndSub‘14Optional以此關鍵字修飾的參數被定義後,主程式在呼叫該函數時,可以省略此參數
Functionadd(ByValaAs
Integer,Optional
ByValbAs
Integer
=0)15EX:CH04-09SubMain()DimaAsIntegera=add(5)'只傳入一個參數也不會發生錯誤,回傳值為回傳值為5MsgBox(a)a=add(5,10)'回傳值為15MsgBox(a)EndSub
'將a,b兩個參數相加並傳回,如果沒有傳入b參數,則預設為Functionadd(ByValaAsInteger,OptionalByValbAsInteger=0)Returna+bEndFunction因為「Optional」修飾字的關係,就算在呼叫add這個Function時,沒有填入參數b值也不會有錯誤訊息16變數的存留期與存取範圍存留期變數在記憶體當中佔有的時間,從什麼時候開始到什麼時候結束存取範圍程式碼中可以存取特定變數的範圍Global(全域變數)v.s.Local(區域變數)17EX:CH04-090001:'這是全域變數0002:DimUserNameAsString0003:'主程式0004:SubMain()0005:UserName=GetUserName()0006:'顯示0007:ShowWelcome()0008:'暫停0009:Pause()0010:EndSub0011:0012:'取得使用者名稱0013:FunctionGetUserName()0014:'這是區域變數0015:DimnAsString0016:0017:Console.Write("請輸入您的名稱:")EX:CH04-090018:n=Console.ReadLine()0019:Returnn0020:EndFunction0021:0022:'顯示歡迎訊息0023:SubShowWelcome()0024:Console.WriteLine(UserName&"您好,歡迎您來到本系統")0025:EndSub0026:0027:'暫停0028:SubPause()0029:Console.WriteLine()0030:Console.Write("===>程式暫停中,請按任意鍵繼續...")0031:Console.ReadKey()0032:EndSub請注意這個變數宣告在主程式SubMain()的外面,稱之為全域變數。這個變數宣告在FunctionGetUserName()裡面,稱之為區域變數。這邊用到了第2行所定義的全域變數。18何時需要定義一個全域變數呢?假設這個變數需要被所有函式存取,則我們會將其定義為全域變數。區域變數則比較簡單,假設某個變數僅會在一定的範圍內存取,我們就會設計成區域變數。Do和Loop區域For[Each]和Next區域If和EndIf區域Select和EndSelect區域SyncLock和EndSyncLockTry和EndTry區域While和EndWhile區域Sub和EndSub區域Function和EndFunction區域19以Static關鍵字宣告的變數是靜態變數,其值會被保留,不會隨著所在的副程式(或函式)的結束而消失…EX:CH04-09
SubMain()ForiAsInteger=1To12Test()NextPause()EndSubSubTest()
StaticnAsIntegern=n+1Console.WriteLine("n:"&n)EndSub以Static關鍵字宣告的變數是靜態變數,其值會被保留,不會隨著所在的副程式(或函式)的結束而消失Static(靜態變數)20前面我們介紹過怎麼自己定義副程式和函式,但是其實在.NETFramework當中,已經有內建相當豐富的函式庫,並且依照不同的功能區分。
例如當我們撰寫程式時,需要使用到與數學函式有關的部份,可以在程式碼輸入區鍵入『System.Math.』:.NetClassLibrary21命名空間名稱功能System.Data提供所有與資料庫(Access,SQLServer,Oracle)相關的函式與功能。System.Drawing提供與繪圖有關的函式與功能。System.IO提供與檔案、資料夾存取有關的功能。System.Net提供與網路相關的函式與功能。System.Net.Mail提供與電子郵件相關的函式與功能。System.Web提供與網際網路資源存取相關的功能。System.Xml提供與XML相關的功能。類別庫包羅萬象,無法在書籍中完全加以介紹,但是透過『命名空間』,對於類別庫的使用,則可以有個概略性的思考方式。例如在.NETFramework當中,與數學有關的系統函式都會位於System.Math命名空間底下,因此如果要尋找某些特定的函式,可以從命名空間開始思考。命名空間是為了區分龐大的函式庫所採用的方法,因為.NET提供了一整套複雜且龐大的內建函式,如果不加以分門別類,上萬個各式各樣的內建函式將會難以分辨。因此,我們可以透過命名空間來對函式庫加以分類,例如Systm.Math.Sqrt()這個寫法當中,Sqrt是函式名稱,而System和Math則是命名空間。這也表示了,命名空間下面還可以有命名空間,如此一來,也有另一個好處,就是即使函式名稱相同,我們也可以冠上不同的命名空間來加以區分。例如,假設我們自己撰寫了一個同名的Sqrt函式,我們可以在這個函式上面冠上不同的命名空間,例如StudyHost.Math.Sqrt,以區別不同的函式。22除了透過System命名空間來存取.NET提供的內建函式之外,在VisualBasic2005當中有一個捷徑,就是MyClass。MyClass機制透過簡單的『My』關鍵字,讓程式設計師可以輕鬆的引用.NETFramework的功能。我們只需要在程式碼撰寫時,鍵入『My.』系統就會跳出可供使用的功能。例如『My.Computer』表示所有與我的電腦相關的功能:MyClassLibrary23『模組』是一群副程式的集合,當我們在主程式中建立了很多副程式(或函式)之後,可以把功能相似的副程式歸類為一個模組,如此一來,開發人員在使用時也比較方便,不需要到處尋找程式碼片段。同時,將主程式碼當中的功能切割成副程式,再歸類到一個模組檔案中,更可以讓開發程式的時候方便管理,後續的維護也會更加便利。特別是在多人同時開發一個專案的時候,這樣的好處會更加的明顯,這種將程式碼建立的更加結構的方式我們稱之為『模組化』。何謂模組(Module)24如何建立一個模組25如何建立一個模組26把需要用到的函式(或副程序)寫進模組裡,這樣在使用時就可以用簡潔的程式碼來呼叫這些函式(或副程序),一方面精簡主程式,另一方面可以讓程式容易維護!更重要的是,透過模組來撰寫應用程式,當我們把程式分割成獨立的幾個功能,且使用模組來設計之後,程式碼可以同時給多個開發人員一起開發,加快開發時程。此外,在這次專案中,建構好的模組,也可以在下次專案中重新拿出來使用,而不需要再撰寫一樣(或相似)的程式碼。模組的功能27EX:CH04-14\NewModule.vbModuleNewModule'暫停
SubPause()Console.WriteLine()Console.Write("===>程式暫停中,請按任意鍵繼續...")Console.ReadKey()
EndSubEndModule只需要打入模組名稱『newmodule.』VS2005就會帶出該模組中可用的函式(剛才我們建了一個Pause)出來給我們選擇。主程式當中,可以這麼使用它:在剛才建立好的模組檔案中,設計一個Sub…模組的使用28註解功能0022:'''<summary>0023:'''把成績平均0024:'''</summary>0025:'''<returns></returns>0026:'''<remarks></remarks>0027:FunctionAverage()AsSingle0028:DimAvgScoreAsSingle0029:0030:AvgScore=SumScore/Students0031:ReturnAvgScore0032:EndFunction請在函式或副程式上頭,連續打三個『‘』,就會自動出現這串文字,請在<summary>和</summary>中,手動入輸入註解函式自動註解功能29模組中函式的可用範圍註解功能ModuleA
SubB()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国企办公采购管理制度
- 培训机构采购部制度
- 财务物资采购管理制度
- 材料采购流程制度
- 装修公司采购部报销制度
- 厨房易耗品采购制度
- 救助站政府采购管理制度
- 采购文件合同管理制度
- 装修采购付款制度
- 原料采购储存管理制度
- 休克诊疗规范课件
- 2025年新生儿窒息复苏试题及答案
- 2026年陕西航空职业技术学院单招职业倾向性考试题库及一套答案详解
- 20万吨-年采矿废石综合回收利用项目环境影响报告书
- (一诊)2026年兰州市高三模拟考试历史试卷(含答案)
- 2025-2026学年教科版(新教材)初中信息科技八年级第二学期教学计划及进度表
- 2026贵州安顺关岭恒升村镇银行春季招聘4人考试参考题库及答案解析
- 企业内部福利待遇制度
- 钢丝pe施工方案(3篇)
- 2026年医疗AI辅助手术报告
- 2026年六安职业技术学院单招职业适应性考试题库含答案详解(考试直接用)
评论
0/150
提交评论