扩展方法
class MyList : IEnumerable<int>
{
public IEnumerator<int> GetEnumerator()
{
yield return 1;
yield return 3;
yield return 4;
yield return 7;
yield return 7;
yield return 9;
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
class Program
{
static int MyCount(MyList list)
{
int sum = 0;
var e = list.GetEnumerator();
while(e.MoveNext())
{
sum++;
}
return sum;
}
static int MyMax(MyList list)
{
int max = int.MinValue;
var e = list.GetEnumerator();
while (e.MoveNext())
{
if (e.Current > max)
max = e.Current;
}
return max;
}
static void Main(string[] args)
{
var list = new MyList();
Console.WriteLine(MyMax(list));
Console.WriteLine(MyCount(list));
Console.Read();
}
}
//需求一:如果需要一个 MyList2 类,其他方法不变,那么代码的重复率又会很高
//解决办法:更改传入类型 MyList 为接口类型:
static int MyCount(IEnumerable<int> list){···}
static int MyMax(IEnumerable<int> list){···}
//需求二:C#是面向对象编程,方法应该放在类中,而 MyCount、MyMax 是外置方法
//解决办法:将方法放在类中
class MyList : IEnumerable<int>
{
public IEnumerator<int> GetEnumerator()
{···}
IEnumerator IEnumerable.GetEnumerator()
{···}
public int MyCount()
{
int sum = 0;
var e = this.GetEnumerator();
while (e.MoveNext())
{
sum++;
}
return sum;
}
public int MyMax()
{
int max = int.MinValue;
var e = this.GetEnumerator();
while (e.MoveNext())
{
if (e.Current > max)
max = e.Current;
}
return max;
}
}
static void Main(string[] args)
{
var list = new MyList();
Console.WriteLine(list.MyCount());
Console.WriteLine(list.MyMax());
Console.Read();
}
//需求三:MyList 和 MyList2 中都需要设置函数,代码重复率高并且无法封闭
//解决办法:使用扩展方法
// 1、定义静态类 2、定义静态方法 3、使用this关键字指示实例化对象
//新建一个MyList方法的静态类
static class MyListFunc
{
public static int MyCount(this MyList list)//该MyList是指希望给MyList类型的实例添加方法,list是指当前实例
{
int sum = 0;
var e = list.GetEnumerator();
while (e.MoveNext())
{
sum++;
}
return sum;
}
public static int MyMax(this MyList list)
{
int max = int.MinValue;
var e = list.GetEnumerator();
while (e.MoveNext())
{
if (e.Current > max)
max = e.Current;
}
return max;
}
}
//将类型改为接口型
public static int MyCount(this IEnumerable<int> list)