IEnumerable接口的使用案例
- [1. IEnumerable接口同时满足数组和列表](#1. IEnumerable接口同时满足数组和列表)
- [2. OPPO和VIVO使用相同接口](#2. OPPO和VIVO使用相同接口)
1. IEnumerable接口同时满足数组和列表
- 利用 IEnumerable 这个接口来实现一个方法可以同时满足数组和列表传入。
- 接口就是供需双方的约定/契约,需求方是用户需要计算一组数据的总和/平均数
- 提供方负责提供这样的算法,但是要求用户输入一个可以被迭代 的集合,集合里面的元素为double类型。 数组和列表有一个相同的接口
IEnumerable ,所以可以通过这个接口将数组和列表统一起来。 - 当然这样做的前提是求和/求平均数操作这两个方法只需要使用迭代功能来遍历数据集里面的数据,而放弃了数组或列表其特有的属性和方法。
csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
double[] Array1 = new double[5] { 1, 2, 3, 4, 5 };
List<double> list = new List<double> { 6, 7, 8, 9, 10 };
Calculate cal = new Calculate();
double res1 = cal.Sum(Array1);
double res2 = cal.Avg(list);
Console.WriteLine(res1);
Console.WriteLine(res2);
}
}
class Calculate
{
public double Sum(IEnumerable<double> nums)
{
double result = 0.0d;
foreach (var item in nums)
{
result += item;
}
return result;
}
public double Avg(IEnumerable<double> nums)
{
double sum = 0.0d;
int count = 0;
foreach (var item in nums)
{
sum += item;
count++;
}
return sum / count;
}
}
}
2. OPPO和VIVO使用相同接口
- 手机类(抽象类 功能包括打电话、接电话、发短信、收短信。)
- 抽象类是包含了未完全实现的方法,而接口所包含的所有方法都应该是未实现的。(抽象类------未完全实现,接口------完全未实现)
- 以上四种功能在手机这个类里面应该全部作为纯虚方法存在,然后到具体品牌的手机类中去实现。
- 也就是说手机类中的所有方法全部都是未实现的方法,这样手机抽象类其实就是接口了。
- 需要注意的是,接口中的方法是没有修饰符的,默认为public,而且也没有方法体。
- 普通类实现接口方法时,必须实现接口里的所有方法,而且要加上public修饰符。
- 当然了,如果你将现在的这个类作为抽象类,那它就可以先实现接口中的一部分方法,剩下的未被实现的方法留着给这个抽象类的子类去实现。
csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//我买了一个oppo手机
PhoneUser user = new PhoneUser(new OPPO());
user.usePhone();
//我又买了一个vivo手机
user = new PhoneUser(new VIVO());
user.usePhone();
}
}
interface IPhone
{
void Ring();
void Answer();
void Send();
void Receive();
}
class OPPO:IPhone
{
public void Ring()
{
Console.WriteLine("Hello!");
}
public void Answer()
{
Console.WriteLine("This is Jay!");
}
public void Send()
{
Console.WriteLine("Good Morning!");
}
public void Receive()
{
Console.WriteLine("Good Evening!");
}
}
class VIVO : IPhone
{
public void Ring()
{
Console.WriteLine("Hello!");
}
public void Answer()
{
Console.WriteLine("This is Jay!");
}
public void Send()
{
Console.WriteLine("Good Morning!");
}
public void Receive()
{
Console.WriteLine("Good Evening!");
}
}
//用户类
class PhoneUser
{
private IPhone _iphone;
public PhoneUser(IPhone iphone)
{
_iphone = iphone;
}
public void usePhone()
{
_iphone.Ring();
_iphone.Answer();
_iphone.Send();
_iphone.Receive();
}
}
}