資源描述:
《C#C++C語言學(xué)會編程第17課迭代器、匿名方法和擴展方法》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第17課迭代器、匿名方法和擴展方法迭代器是一個語句塊,它可以產(chǎn)生一系列有序值,從而使得foreach語句可以訪問該序列。匿名方法是一種特殊的方法,它由delegate關(guān)鍵字、參數(shù)列表(可選)和包含在“{”和“}”分隔符中的語句列表組成,并省略了方法的名稱。擴展方法可以向現(xiàn)有的類型“添加”新的方法,它是一種靜態(tài)方法,通過擴展類型的實例來調(diào)用擴展方法。本章將講解C#語言中的迭代器、匿名方法和擴展方法,主要介紹以下知識點。?創(chuàng)建非泛型和泛型迭代器;?非泛型和泛型枚舉器;?創(chuàng)建匿名方法;?將匿名方法作為參數(shù)傳遞;?聲明
2、擴展方法;?調(diào)用擴展方法。17.1迭代器迭代器(iterator)是一個產(chǎn)生(yield)有序值序列的語句塊(block)。它也可以通過yield關(guān)鍵字對數(shù)組或集合類執(zhí)行自定義迭代。迭代器包含以下兩個特有的語句。yieldreturn語句,產(chǎn)生迭代的下一個值。yieldbreak語句,指示迭代完成。當(dāng)?shù)鲌?zhí)行到y(tǒng)ieldreturn語句時,迭代器會保存當(dāng)前位置。如果該迭代器再一次被調(diào)用時,該迭代器將從上述保存的位置重新開始執(zhí)行。迭代器可以產(chǎn)生一系列的值,而且所有值的類型均相同,該類型稱為迭代器的返回類型,又稱
3、為產(chǎn)生類型。17.1.1創(chuàng)建非泛型迭代器IEnumerable接口表示公開枚舉數(shù),該枚舉數(shù)支持在非泛型集合上進行簡單迭代。IEnumerable接口只包含GetEnumerator()方法,它返回一個循環(huán)訪問集合的枚舉數(shù)。創(chuàng)建一個非泛型迭代器最常用的方法是實現(xiàn)IEnumerable接口的GetEnumerator()方法。17.1.2創(chuàng)建泛型迭代器如果要創(chuàng)建一個泛型迭代器,往往需要實現(xiàn)IEnumerable和IEnumerable接口的GetEnumerator()方法。17.1.3IEnumerator
4、和IEnumerator接口IEnumerator表示枚舉器的非泛型接口,支持對非泛型集合的簡單迭代。IEnumerator表示枚舉器的泛型接口,支持泛型集合的簡單迭代。1.IEnumerator接口2.IEnumerator接口17.2匿名方法顧名思義,匿名方法(anonymousmethod)是一種隱藏了名稱的方法。在C#2.0版本之前,聲明委托的唯一方法是使用命名方法,即方法必須指定其名稱。C#2.0引入了匿名方法實現(xiàn)了同樣的功能,C#3.0及其以上版本,使用Lambda表達式(第18章
5、)取代了匿名方法,它比匿名方法更加簡潔。匿名方法允許與委托關(guān)聯(lián)的代碼以“內(nèi)聯(lián)”方式寫入使用委托的位置,從而方便地將代碼直接“綁定”到委托實例。17.2.1創(chuàng)建匿名方法匿名方法由delegate關(guān)鍵字、參數(shù)列表(可選)和包含在“{”和“}”分隔符中的語句列表組成。從匿名方法的組成元素可以看到,匿名方法已經(jīng)省略了該方法的名稱。17.2.2將匿名方法作為參數(shù)傳遞正是因為匿名方法允許與委托關(guān)聯(lián)的代碼以“內(nèi)聯(lián)”方式,從而使得可以將匿名方法作為方法的參數(shù)來傳遞。17.3擴展方法擴展方法可以使得開發(fā)人員能夠向現(xiàn)有類型“添加”
6、新的方法,而且不需要創(chuàng)建新的派生類型、重新編譯或以其他方式修改原始類型。擴展方法是一種靜態(tài)方法,可以通過擴展類型的實例來調(diào)用擴展方法。17.3.1聲明擴展方法聲明擴展方法時,需要使用this修飾符。擴展方法的第一個參數(shù)指定該方法所作用的類型,并使用this修飾符作為該參數(shù)的前綴。17.3.2導(dǎo)入擴展方法導(dǎo)入擴展方法比較簡單,只要使用using指令引入擴展方法所在的命名空間即可。實際上,被導(dǎo)入的擴展方法作為其第一個參數(shù)的類型上的附加方法。17.3.3調(diào)用擴展方法使用using指令導(dǎo)入ToInt32(thisstr
7、ingstr)擴展方法之后,就可以調(diào)用該擴展方法了。17.4實例一:擴展string類型的方法【實例17-1】為string類型擴展了一個方法,該方法的名稱為“ToInt32(thisstringstr)”,它可以將一個字符串轉(zhuǎn)換為一個整數(shù)。17.5小結(jié)本章主要介紹了C#語言中的迭代器、匿名方法和擴展方法,如創(chuàng)建非泛型和泛型迭代器、非泛型和泛型枚舉器、創(chuàng)建匿名方法、將匿名方法作為參數(shù)傳遞、聲明擴展方法、調(diào)用擴展方法等。其中,讀者要著重掌握創(chuàng)建非泛型和泛型迭代器和創(chuàng)建匿名的方法,為后續(xù)編寫C#程序代碼奠定基礎(chǔ)。下
8、一章將要介紹C#語言中的Lambda表達式和查詢表達式。17.6習(xí)題在VisualStudio2008集成開發(fā)環(huán)境中創(chuàng)建名稱為“Test_17”的控制臺應(yīng)用程序,并實現(xiàn)以下功能。(1)將名稱為“class1.cs”的文件添加到該應(yīng)用程序中。(2)在該應(yīng)用程序中創(chuàng)建一個泛型迭代器,并使用該迭代器。