C#:iterator 迭代器/partial class 分布类/泛型

C#:iterator 迭代器/partial class 分布类/泛型

iterator 迭代器

写个最简单的迭代,(迭代一个字符串数组):

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+"
");
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.实践:

     

泛型:

       泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。

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.验证:

  

水平有限,还望指教,谢谢!

 
 
 
标签: C#
原文地址:https://www.cnblogs.com/Leo_wl/p/3269711.html