日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#迭代器、装箱/拆箱、重载等

發布時間:2025/3/13 C# 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#迭代器、装箱/拆箱、重载等 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

迭代器

迭代器是什么?

迭代器是作為一個容器,將要遍歷的數據放入,通過統一的接口返回相同類型的值。

為什么要用迭代器?

為何了為集合提供統一的遍歷方式,迭代器模式使得你能夠獲取到序列中的所有元素而不用關心是其類型,如果沒有迭代器,某些數據結構遍歷較為困難,如Map無法迭代

如果一個類實現了IEnumerable接口,那么就能夠被迭代,才能使用foreach

迭代器概述

  • 迭代器是可以返回相同類型的值的有序序列的一段代碼。
  • 迭代器可用作方法、運算符或?get?訪問器的代碼體。
  • 迭代器代碼使用?yield return?語句依次返回每個元素。yield break?將終止迭代。
  • 可以在類中實現多個迭代器。每個迭代器都必須像任何類成員一樣有唯一的名稱,并且可以在?foreach?語句中被客戶端代碼調用,如下所示:foreach(int x in SampleClass.Iterator2){}
  • 迭代器的返回類型必須為?IEnumerable、IEnumerator、IEnumerable<T> 或?IEnumerator<T>。

yield?關鍵字用于指定返回的值。到達?yield return?語句時,會保存當前位置。下次調用迭代器時將從此位置重新開始執行

如何使用迭代器

?

public System.Collections.IEnumerator GetEnumerator() {for (int i = 0; i < max; i++){yield return i;} }

?

  

//為整數列表創建迭代器 public class SampleCollection{public int[] items = new int[5] { 5, 4, 7, 9, 3 };public System.Collections.IEnumerable BuildCollection() {for (int i = 0; i < items.Length; i++) {yield return items[i];}}} class Program {static void Main(string[] args) {SampleCollection col = new SampleCollection();foreach (int i in col.BuildCollection())//輸出集合數據 {System.Console.Write(i + " ");}for (;;) ;}}

?

?

類型比較

封箱和拆箱子:封箱是把值類型轉換為System.Object,或者轉換為由值類型的接口類型。拆箱相反。

裝箱和拆箱是為了將值轉換為對象

struct MyStruct{public int Val;}class Program{static void Main(string[] args) {MyStruct valType1 = new MyStruct();valType1.Val = 1;object refType = valType1;//封箱操作,可以供傳遞用MyStruct valType2 = (MyStruct)refType;//訪問值類型必須拆箱Console.WriteLine(valType2.Val);//輸出1for (;;) ;}

Is運算符語法:

<operand>is<type>同類型返回true,不同類型返回false

As運算符語法:

<operand>is<type>把一種類型轉換為指定的引用類型

?

運算符重載

public class Add2 {public int val {get; set;}public static Add2 operator ++(Add2 op1) {op1.val = 100;//設置屬性op1.val = op1.val + 2;return op1;}} class Program {static void Main(string[] args) {Add2 add = new Add2();add++;Console.WriteLine(add.val);//輸出102for (;;) ;}}

?

轉載于:https://www.cnblogs.com/feichangnice/p/5251731.html

總結

以上是生活随笔為你收集整理的C#迭代器、装箱/拆箱、重载等的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。