接口 IEnumerable
C#提供了可供类继承的接口,在此解释一下经常遇到的IEnumerable,在此首相解释一下接口,如下例所示:
/// <summary> /// 简述Interface的用法 /// </summary> //定义接口,接口都是公用的,其内部的方法属性都是公用的,无需作用域修饰符 public interface IAttack { string AttackMethod { get; set; } void Attack(); } //定义两个不同类型的攻击者,两者均继承了此接口 public class Attacker1:IAttack { private string attacker1="Attacker1 发动了攻击"; public string AttackMethod { get;set; } public void Attack() { Console.WriteLine(attacker1); } } class Attacker2:IAttack { private string attacker2 = "Attacker2 发动了攻击"; public string AttackMethod { get;set; } public void Attack() { Console.WriteLine(attacker2); } } class Program { static void Main(string[] args) { //可以通过接口来声明,并通过相关类来构造 //接口的思想在于此,通过统一的接口定义,实现不通方法 IAttack a1 = new Attacker1(); a1.Attack(); Attacker1 a2 = new Attacker1(); a2.Attack(); IAttack a3 = new Attacker2(); a3.Attack(); Console.ReadKey(); } }
接口即统一定义了一些方法、属性、所以和事件的切入口,通过不同的类的继承来实现不同的方法。IEnumerable则是C#定义的接口它拥有一个GetEnumerator方法,该方法返回值为IEnumerator类型,IEnumerator为拥有一个Current属性和MoveNext(return bool)、Reset()方法的接口。在C#中string类和list类均继承了IEnumerable,并对方法GetEnumerator进行了实现,所以根据接口的定义与实现,则下列语句是合法的:
IEnumerable ab = new List<int>();
IEnumerable abc = new string(b);
起效果等同于
List<int> ab=new List<int>();
string ab=new string(..)
用IEnumerable定义的对象必须用实现GetEnumerator方法的类(即继承自IEnumerable的类)进行构造。在C#中可以使用foreach语句的类需要继承IEnumerable接口,实现其对应的方法。