C#学习笔记-刘铁锰C#入门 视频P29 接口即契约(contract) 例子一(不同类型数组求和求平均)
刘铁锰C#入门 视频P29 接口即契约(contract) 例子一
//这个例子是要实现对一组整数 进行 求值 和求平均值 操作
//但是 这组整数 可能放在一个“int”整形数组里,
//但是也有可能是放在 一个 “ArrayList ”实例里面,且这个“ArrayList”是非泛型的
//**//** 现在我对“int”和“ArrayList”里面的数组 求和 与 求平均值时
//**//** 且在 不使用 “接口”的 情况下 我需要 写 四个方法--
//--《(一个求平均值 一个求和)两个int + 两个ArrayList》 共四个
//强类型语言 所以 用来操作 整形数组的“int”不能用来操作“ArrayList”的 因此共四个

using System; using System.Collections; namespace ConsoleApp21 { class Program { static void Main(string[] args) { int[] nums1 = new int[] { 1, 2, 3, 4, 5 }; ArrayList nums2 = new ArrayList { 1, 2, 3, 4, 5 }; Console.WriteLine(Sum(nums1)); //求值 Console.WriteLine(Avg(nums1)); //求平均值 Console.WriteLine(Sum(nums2));//求值 Console.WriteLine(Avg(nums2));//求平均值 } static int Sum(int[] nums) { int sum = 0; foreach (var n in nums) { sum += n; } return sum; // 一个“int”求和 } static double Avg(int[] nums) { int sum = 0; double count = 0; foreach (var n in nums) { sum += n; count++; } return sum / count; // 一个“int”求平均值 } static int Sum(ArrayList nums) { int sum = 0; foreach (var n in nums) { sum += (int )n; // 因为 ArrayList里面存储的类型 是object 类型的 所以讲“object”强转为(int)
} return sum; // 一个“ArrayList”求和 } static double Avg(ArrayList nums) { int sum = 0; double count = 0; foreach (var n in nums) { sum += (int)n; count++; } return sum / count; // 一个“ArrayList”求平均值 //总的 四个方法 } } }
接着 下一步是 因为 int 整形数组的基类是 array 且 在代码中 对“array”按下F12键 跑到里面去 发现 它还实现了“IEnumerable”接口
恰好 “ArrayList ”按下F12进去 以后 也发现了他实现了“IEnumerable”接口 且 接口也相当于契约 等于是 我接受这个契约 保证自己可以被迭代
因此可以将 程序中的
static int Sum(IEnumerable nums) //“IEnumerable”替换“ArrayList 或者将 “int”替换成 “ArrayList” ” { int sum = 0; foreach (var n in nums) { sum += (int )n; // 因为 ArrayList里面存储的类型 是object 类型的 所以讲“object”强转为(int) } return sum; // 一个“ArrayList”求和 } static double Avg(IEnumerable nums) //“IEnumerable”替换“ArrayList 或者 将“int”替换成“ArrayList” { int sum = 0; double count = 0; foreach (var n in nums) { sum += (int)n; count++; } return sum / count; // 一个“ArrayList”求平均值 //总的 由四个方法减少成了两个方法!! }

浙公网安备 33010602011771号