迭代器是可以返回相同类型的值的有序序列的一段代码。
迭代器可用作方法、运算符或 get 访问器的代码体。
迭代器代码使用 yield return 语句依次返回每个元素。yield break 将终止迭代。
可以在类中实现多个迭代器。每个迭代器都必须像任何类成员一样有唯一的名称,并且可以在 foreach 语句中被客户端代码调用,如下所示:foreach(int x in SampleClass.Iterator2){}
迭代器的返回类型必须为 IEnumerable、IEnumerator、IEnumerable<T> 或 IEnumerator<T>。
yield 关键字用于指定返回的值。到达 yield return 语句时,会保存当前位置。下次调用迭代器时将从此位置重新开始执行。
写个最简单的迭代,(迭代一个字符串数组):
1.实现接口中的方法:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Collections; //动态数组是在这个命名空间下的,所以使用前要包含 7 8 namespace ConsoleApplication1 9 { 10 //interator_class是继承IEnumerable接口的类 11 class interator_class:System.Collections.IEnumerable 12 { 13 //写一个要迭代的字符串数组 14 ArrayList al = new ArrayList() {"大家好!","我是李晓峰","希望大家多多指教!","谢谢" }; 15 16 //实现GETEnumerator()该方法 17 public System.Collections.IEnumerator GetEnumerator() 18 { 19 for (int i = 0; i < 4; i++) 20 { yield return al[i]; } //返回 21 } 22 } 23 }
2.调用:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication1 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 //实例化interator_class类 14 interator_class ic = new interator_class(); 15 16 //迭代 17 foreach (string al_ary in ic) 18 { 19 Console.WriteLine(al_ary+"\n"); 20 } 21 22 //聚焦显示 23 Console.ReadLine(); 24 } 25 } 26 }
3.运行:
partial class 分布类:
简单说就是将一个类在一个命名空间内解剖开:
例如:写一个partial类,每个class中分布一个方法():
1.分布类:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace WindowsFormsApplication1 8 { 9 //写4个分布类,每个类中分别写了一个运算方法: 10 11 public partial class jisuan_fangfa 12 { 13 public int jiafa(int a,int b) 14 { return a + b; } 15 } 16 17 public partial class jisuan_fangfa 18 { 19 public int jianfa(int a, int b) 20 { return a - b; } 21 } 22 23 public partial class jisuan_fangfa 24 { 25 public int chengfa(int a, int b) 26 { return a * b; } 27 } 28 29 30 public partial class jisuan_fangfa 31 { 32 public int chufa(int a, int b) 33 { return a /b; } 34 } 35 }
2.调用:
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace WindowsFormsApplication1 12 { 13 public partial class Form6 : Form 14 { 15 public Form6() 16 { 17 InitializeComponent(); 18 } 19 20 private void Form6_Load(object sender, EventArgs e) 21 { 22 //默认回车键为 计算; 23 AcceptButton = button1; 24 25 //向combobox内添加选项; 26 comboBox1.Items.Add("加"); comboBox1.Items.Add("乘"); 27 comboBox1.Items.Add("除"); comboBox1.Items.Add("减"); 28 29 //combobox默认选择 加法 30 comboBox1.SelectedIndex = 0; 31 32 this.toolStripStatusLabel1.Text = "欢迎使用!"; 33 34 } 35 36 private void button1_Click(object sender, EventArgs e) 37 { 38 if (textBox1.Text == string.Empty || textBox2.Text == string.Empty) 39 { 40 MessageBox.Show("请输入要运算的数据!"); 41 42 //提示输入信息: 43 if (textBox1.Text == string.Empty) 44 { errorProvider1.SetError(textBox1, "这里不能为空!"); } 45 if (textBox2.Text == string.Empty) 46 { errorProvider1.SetError(textBox2, "这里不能为空!"); } 47 } 48 else 49 { 50 //实例化类 51 jisuan_fangfa jisuan = new jisuan_fangfa(); 52 53 switch (comboBox1.Text.Trim()) //判断combobox中选择计算的模式 54 { 55 //数据的转换/判断 56 case "加": textBox3.Text=jisuan.jiafa(Convert.ToInt32(textBox1.Text.Trim()),Convert.ToInt32(textBox2.Text.Trim())).ToString(); break; 57 case "减": textBox3.Text = jisuan.jianfa(Convert.ToInt32(textBox1.Text.Trim()), Convert.ToInt32(textBox2.Text.Trim())).ToString(); break; 58 case "乘": textBox3.Text = jisuan.chengfa(Convert.ToInt32(textBox1.Text.Trim()), Convert.ToInt32(textBox2.Text.Trim())).ToString(); break; 59 case "除": textBox3.Text = jisuan.chufa(Convert.ToInt32(textBox1.Text.Trim()), Convert.ToInt32(textBox2.Text.Trim())).ToString(); break; 60 } 61 62 } 63 } 64 } 65 }
3.实践:
DBA2DC8F2488ECA.png" alt="" />
泛型:
泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。
1.接口:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication2 8 { 9 public interface Interface1<T> 10 { 11 T fangfa(); 12 } 13 }
2.继承泛型接口的类:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication2 8 { 9 //Class_t类中有2个泛型,T是继承于T1,T可以实例化 10 public class Class_t<T,T1>:Interface1 <T1 > where T:T1, new() 11 { 12 //实现该方法: 13 public T1 fangfa() 14 { return new T(); } 15 16 } 17 }
3.实例化,调用:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication2 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 //实例化,并添加类型 14 Interface1<System.ComponentModel.IListSource> inter = new Class_t<System.Data.DataTable, System.ComponentModel.IListSource>(); 15 16 //输出inter.fangfa()的类型 17 Console.WriteLine("T是:"+inter.fangfa().GetType().ToString()+"类型"); 18 Console.ReadLine(); 19 } 20 } 21 }
4.运行:
2.方法();
写一个用户名和密码的验证方法:
1.方法:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication2 8 { 9 public class Class1 10 { 11 public void error_show<T, T1>(T yonghuming, T1 mima) 12 { 13 if (string.Equals(yonghuming, "lixiaofeng") && string.Equals(mima.ToString(), "123")) 14 { 15 Console.WriteLine("验证成功!"); 16 } 17 else 18 { Console.WriteLine("验证失败,你的输入信息有问题!"); } 19 20 21 } 22 23 } 24 }
2.调用:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication2 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 int mii; //定义密码变量 14 15 //接受用户输入的用户名和密码 16 Console.WriteLine("请输入用户名:"); string mizi = Console.ReadLine(); 17 Console.WriteLine("请输入密码:"); mii = Convert.ToInt32(Console.ReadLine()); 18 19 //实例化class1,并填入泛型类型 20 Class1 c1 = new Class1(); 21 c1.error_show<string, int>(mizi, mii ); 22 23 Console.ReadLine(); 24 } 25 } 26 }
3.验证:
水平有限,还望指教,谢谢!