zoukankan      html  css  js  c++  java
  • 接口 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接口,实现其对应的方法。

  • 相关阅读:
    [Baltic2013]ballmachine BZOJ3133
    [Jxoi2012]奇怪的道路 BZOJ3195 状压DP
    [Baltic 2011]Lamp BZOJ2346
    可并堆
    [Jsoi2016]最佳团体 BZOJ4753 01分数规划+树形背包/dfs序
    点分治
    J2EE WEB应用架构分析
    {经典}springmvc+mybatis+restful+webservice Jeesz分布式架构
    深入Spring Boot:那些注入不了的 Spring 占位符 ( ${} 表达式 )
    G1 垃圾收集器之对象分配过程
  • 原文地址:https://www.cnblogs.com/llstart-new0201/p/6791880.html
Copyright © 2011-2022 走看看