接口 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接口,实现其对应的方法。

 

posted @ 2017-05-01 14:39  81192  阅读(232)  评论(0编辑  收藏  举报