




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、(一)索引器教程定義索引器”使您可以創(chuàng)建作為康擬數(shù)組”的類。該類的實例可以使用口數(shù)組訪問運算符進行訪問。在C#中定義索引器類似于在C+中定義運算符口,但前者靈活得多。對于封裝類似數(shù)組的功能或類似集合的功能的類,使用索引器使該類的用戶可以使用數(shù)組語法訪問該類。例如,假定您想定義一個類,該類使文件顯示為字節(jié)數(shù)組。如果文件非常大,則將整個文件讀入內(nèi)存是不切實際的,尤其在您只想讀取或更改少數(shù)字節(jié)時。通過定義FileByteArray類,您可使文件外觀類似于字節(jié)數(shù)組,但讀或?qū)懽止?jié)時,實際執(zhí)行的是文件的輸入和輸出。除下面的示例以外,本教程中還討論有關(guān)創(chuàng)建索引屬性”的高級主題。示例本示例中,F(xiàn)ileByte
2、Array類使得像字節(jié)數(shù)組那樣訪問文件成為可能。Reverse類反轉(zhuǎn)文件的字節(jié)??梢赃\行該程序以反轉(zhuǎn)任何文本文件的字節(jié),包括程序源文件本身。若要將反轉(zhuǎn)的文件更改回正常狀態(tài),請在同一文件上再次運行該程序。/indexer.cs/arguments:indexer.txtusingSystem;usingSystem.IO;/Classtoprovideaccesstoalargefile/asifitwereabytearray.publicclassFileByteArrayStreamstream;/Holdstheunderlyingstream/usedtoaccessthefile./
3、CreateanewFileByteArrayencapsulatingaparticularfile.publicFileByteArray(stringfileName)stream=newFileStream(fileName,FileMode.Open);/Closethestream.Thisshouldbethelastthingdone/whenyouarefinished.publicvoidClose()stream.Close();stream=null;/Indexertoprovideread/writeaccesstothefile.publicbytethislon
4、gindex/longisa64-bitinteger/Readonebyteatoffsetindexandreturnit.getbytebuffer=newbyte1;stream.Seek(index,SeekOrigin.Begin);stream.Read(buffer,0,1);returnbuffer0;/Writeonebyteatoffsetindexandreturnit.setbytebuffer=newbyte1value;stream.Seek(index,SeekOrigin.Begin);stream.Write(buffer,0,1);/Getthetotal
5、lengthofthefile.publiclongLengthgetreturnstream.Seek(0,SeekOrigin.End);/DemonstratetheFileByteArrayclass./Reversesthebytesinafile.publicclassReversepublicstaticvoidMain(Stringargs)/Checkforarguments.if(args.Length=0)Console.WriteLine("indexer<filename>");return;FileByteArrayfile=newF
6、ileByteArray(args0);longlen=file.Length;/Swapbytesinthefiletoreverseit.for(longi=0;i<len/2;+i)bytet;/Notethatindexingthe"file"variableinvokesthe/indexerontheFileByteStreamclass,whichreads/andwritesthebytesinthefile.t=filei;filei=filelen-i-1;filelen-i-1=t;file.Close();輸入:indexer.txt索引器”示
7、例中稱為Test.txt)若要測試程序,可使用具有以下內(nèi)容的文本文件(該文件在publicclassHellol(publicstaticvoidMain()(System.Console.WriteLine("Hello,World!");若要反轉(zhuǎn)該文件的字節(jié),請編譯程序,然后使用下面的命令行:indexerindexer.txt若要顯示反轉(zhuǎn)的文件,請輸入命令:Typeindexer.txt示例輸出;)"!dlroW,olleH"(eniLetirW.elosnoC.metsyS()(niaMdiovcitatscilbup(1olleHssalcci
8、lbup代碼討論* 由于索引器是使用口運算符進行訪問的,因此沒有名稱。有關(guān)索引器聲明語法,請參見索引器。* 在上面的示例中,索引器類型是byte,并采用long(64位整數(shù))類型的單個索引。獲取"(Get)訪問器定義從文件讀取一個字節(jié)的代碼,而設(shè)置”(Set)訪問器定義向文件寫入一個字節(jié)的代碼。在設(shè)置”(Set)訪問器內(nèi),預定義的參數(shù)值為正賦給虛擬數(shù)組元素的值。* 索引器必須至少有一個參數(shù)。盡管相當少見,但索引器可以有多個參數(shù),以模擬多維虛擬數(shù)組”。盡管整數(shù)參數(shù)最常見,但索引器參數(shù)可以為任何類型。例如,標準的字典"(Dictionary)類提供參數(shù)類型為Object的索引器
9、。* 盡管索引器功能強大,但有一點很重要,僅當類似數(shù)組的抽象化有意義時才使用索引器。始終應(yīng)仔細考慮使用常規(guī)方法是否會同樣清楚。例如,下面是使用索引器不當?shù)睦樱篶lassEmployee(/VERYBADSTYLE:usinganindexertoaccess/thesalaryofanemployee.publicdoublethisintyear(get(/returnemployee'ssalaryforagivenyear.)盡管合法,但只有獲取"(Get)訪問器的索引器通常不是很好的結(jié)構(gòu)。在此情況下,強烈建議考慮使用方法。(二)索引屬性本教程展示如何實現(xiàn)使用索引屬性
10、的類。索引屬性使您可以使用表示類似于數(shù)組的若干種不同事物的集合的類。學習本教程以前應(yīng)完成索引器教程。教程假定您要編寫一個Document類,該類封裝非常長的文本章節(jié)。為能夠方便地實現(xiàn)各種操作(如檢查拼寫),您可能希望以單詞(以及字符)的虛擬數(shù)組形式查看文檔。下面的示例展示實現(xiàn)這種類的技術(shù)。對于每個索引屬性",您定義一個嵌套類,該類包含對主類實例的反向引用。主類上的readonly字段提供對嵌套類(定義每個虛擬數(shù)組)的實例的訪問。每個嵌套類定義一個索引器以及其他類似集合的方法(例如Count屬性)。下面的示例針對Words”和Characters”展示這一點。注意:請慎重使用該技術(shù)!僅
11、在使用數(shù)組索引操作提供的抽象化能明確闡明使用您的類的代碼,并且索引器同時具有獲取"(Get)和設(shè)置"(Set)訪問器時,才使用該模式。示例本示例中定義了Document類。使用Words和Characters這兩個索引屬性在Document對象上執(zhí)行某些文本操作。/indexedproperty.csusingSystem;publicclassDocument/Typeallowingthedocumenttobeviewedlikeanarrayofwords:publicclassWordCollectionreadonlyDocumentdocument;/Thec
12、ontainingdocumentinternalWordCollection(Documentd)document=d;)/Helperfunction-searchcharacterarray"text",startingat/character"begin",forwordnumber"wordCount."Returnsfalse/iftherearelessthanwordCountwords.Sets"start"and/length"tothepositionandlengthofthewo
13、rdwithintext:privateboolGetWord(chartext,intbegin,intwordCount,outintstart,outintlength)intend=text.Length;intcount=0;intinWord=-1;start=length=0;for(inti=begin;i<=end;+i)boolisLetter=i<end&&Char.IsLetterOrDigit(texti);if(inWord>=0)if(!isLetter)if(count+=wordCount)start=inWord;lengt
14、h=i-inWord;returntrue;inWord=-1;elseif(isLetter)inWord=i;returnfalse;/Indexertogetandsetwordsofthecontainingdocument:publicstringthisintindexgetintstart,length;if(GetWord(document.TextArray,0,index,outstart,outlength)returnnewstring(document.TextArray,start,length);elsethrownewIndexOutOfRangeExcepti
15、on();setintstart,length;if(GetWord(document.TextArray,0,index,outstart,outlength)/Replacethewordatstart/lengthwiththe/string"value":if(length=value.Length)Array.Copy(value.ToCharArray(),0,document.TextArray,start,length);)else(char口newText=newchardocument.TextArray.Length+value.Length-leng
16、th;Array.Copy(document.TextArray,0,newText,0,start);Array.Copy(value.ToCharArray(),0,newText,start,value.Length);Array.Copy(document.TextArray,start+lengthnewText,start+value.Length,document.TextArray.Length-start-length);document.TextArray=newText;)elsethrownewIndexOutOfRangeException();)/Getthecou
17、ntofwordsinthecontainingdocument:publicintCount(get(0,intcount=0,start=0,length=0;while(GetWord(document.TextArray,start+length,outstart,outlength)+count;returncount;)/Typeallowingthedocumenttobeviewedlikean"array"/ofcharacters:publicclassCharacterCollection(readonlyDocumentdocument;/Theco
18、ntainingdocumentinternalCharacterCollection(Documentd)(document=d;)/Indexertogetandsetcharactersinthecontainingdocument:publiccharthisintindex(get(returndocument.TextArrayindex;set(document.TextArrayindex=value)/Getthecountofcharactersinthecontainingdocument:publicintCount(get(returndocument.TextArray.Length;)/Becausethetypesofthefieldshaveindexers,/thesefieldsappearas"indexedpr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年云計算服務(wù)模式創(chuàng)新與市場競爭格局預測研究報告
- 2025年元宇宙社交平臺虛擬現(xiàn)實社交場景構(gòu)建與用戶體驗研究
- 2025屆云南省云南大附中(一二一校區(qū))八年級英語第二學期期中質(zhì)量檢測試題含答案
- 四川省錦江區(qū)七中學育才2025年英語八下期中復習檢測試題含答案
- 2025年醫(yī)院信息化建設(shè)醫(yī)療質(zhì)量管理評估報告
- 2025年醫(yī)藥企業(yè)研發(fā)外包(CRO)與臨床試驗數(shù)據(jù)安全與隱私保護法規(guī)解讀報告
- 2025年醫(yī)藥流通行業(yè)供應(yīng)鏈與成本控制策略創(chuàng)新研究報告
- 2025年醫(yī)藥流通行業(yè)供應(yīng)鏈優(yōu)化與成本控制管理創(chuàng)新報告
- 2025年數(shù)字貨幣行業(yè)監(jiān)管政策對加密貨幣市場的影響報告001
- 保潔安全培訓試題及答案
- 2025年高考英語全國二卷試題含答案
- SL631水利水電工程單元工程施工質(zhì)量驗收標準第1部分:土石方工程
- 江岸區(qū)2023-2024學年下學期期末七年級數(shù)學試卷(含答案)
- 《國土空間規(guī)劃》-課程教學大綱
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計規(guī)范
- 2024年海關(guān)事務(wù)培訓資料
- 學校中層干部選拔考試教育教學管理知識試題題庫(包含:名詞解釋、簡答題、論述題、案例分析)
- 2021-2022學年江蘇省揚州市高一下學期期末地理試題
- 串并聯(lián)電路電壓表電流表(課堂PPT)
- XXX縣第三次國土調(diào)查技術(shù)報告
- 3中國電信現(xiàn)場綜合化維護培訓教材安全篇
評論
0/150
提交評論