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

接口 IEnumerable的更多相关文章

  1. IEnumerable和IEnumerable<T>接口

    IEnumerable和IEnumerable<T>接口 IEnumerable和IEnumerable<T>接口在.NET中是非常重要的接口,它允许开发人员定义foreach ...

  2. C# 常用接口学习 IEnumerable<T>

    作者:乌龙哈里 时间:2015-10-24 平台:Window7 64bit,Visual Studio Community 2015 本文参考: MSDN IEnumerable<T> ...

  3. C#内建接口:IEnumerable

    这节讲一下接口IEnumerable. 01 什么是Enumerable 在一些返回集合数据的接口中,我们经常能看到IEnumerable接口的身影.那什么是Enumerable呢?首先它跟C#中的e ...

  4. 从yield关键字看IEnumerable和Collection的区别

    C#的yield关键字由来以久,如果我没有记错的话,应该是在C# 2.0中被引入的.相信大家此关键字的用法已经了然于胸,很多人也了解yield背后的“延迟赋值”机制.但是即使你知道这个机制,你也很容易 ...

  5. .NET 接口

    接口      接口是一组抽象成员的集合,表示某个类或结构可以选择去实现的行为,描述的是可属于任何类或结构的一组相关功能.接口方法的实现是在实现接口的类中完成的,实现接口的类可以显式实现该接口的成员, ...

  6. 使用Json.Net处理json序列化和反序列化接口或继承类

    以前一直没有怎么关注过Newtonsoft的Json.Net这个第三方的.NET Json框架,主要是我以前在开发项目的时候大多数使用的都是.NET自带的Json序列化类JavaScriptSeria ...

  7. 自定义一个可以使用foreach语句进行迭代的类(IEnumerable)

    在c#中,凡是实现了IEnumerable接口的数据类型都可以用foreach语句进行迭代访问.所以,我们要定义一个可以使用foreach进行迭代访问的类,就必须要实现IEnumerable接口. / ...

  8. C#中的ICollection接口

    一.集合类: 1.1 ICollection接口 前面我们学习了数组,这是.net Framework定义的最基本的集合类型,除过数组外,.net Framework还另外定义了很多集合类型以满足编程 ...

  9. 十四、C# 支持标准查询运算符的集合接口

    支持标准查询运算符的集合接口. System.Linq.Enumeralbe类提供的一些常用的API 来执行集合处理 1.匿名类型 2.隐匿类型的局部变量 3.集合初始化器 4.集合 5.标准查询运算 ...

随机推荐

  1. 从壹开始学习 NetCore 新篇章 ║ Blog.Core 开发社之招募计划书

    宫 哈喽大家好,国庆马上就要来了,在新的第四季度来临之际,祝大家年末能顺顺利利,解决所有的难题.大家可能从我的标题里也能看的出来,老张又要耍花样,搞事情了,近来随着 netcore 3.0 的正式推出 ...

  2. asp.net core IdentityServer4 实现 implicit(隐式许可)实现第三方登录

    前言 OAuth 2.0默认四种授权模式(GrantType) 授权码模式(authorization_code) 简化模式(implicit) 密码模式(resource owner passwor ...

  3. Jmeter日记,很乱很随意

    这个笔记是写给自己看的,很乱很随意,可能以后自己都看不懂.哈哈 Jmeter两种录制方式: 1使用badboy 2.使用代理 浏览器设置代理 参数化 随机参数化 插件的使用 官网下载和说明https: ...

  4. Sentinel Cluster流程分析

     前面介绍了sentinel-core的流程,提到在进行流控判断时,会判断当前是本地限流,还是集群限流,若是集群模式,则会走另一个分支,这节便对集群模式做分析. 一.基本概念  namespace:限 ...

  5. Springboot2.x整合RabbitMQ

    1.RabbitMQ介绍 可参照RabbitMQ笔记 2.接入配置 pom依赖 <!--amqp依赖--> <dependency> <groupId>org.sp ...

  6. 004-python面向对象,错误,调试和测试

    ---恢复内容开始--- 1.面向对象 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...

  7. Navicat使用常见的两个问题及解决方法,提高开发效率

    Navicat使用常见问题 在我们日常开发过程中,一般不会直接使用命令行来操作 MYSQL 数据库,而会选择一些图形化界面去帮助我们来进行此类操作,常用的有:SQLyog(Logo也是小海豚),Nav ...

  8. Scala 学习笔记之集合(8) Try和Future

    import util._ import concurrent.ExecutionContext.Implicits.global import concurrent.Future import co ...

  9. spring-data-redis-cache 使用及源码走读

    预期读者 准备使用 spring 的 data-redis-cache 的同学 了解 @CacheConfig,@Cacheable,@CachePut,@CacheEvict,@Caching 的使 ...

  10. Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

    多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程. 一.ThreadPoolTaskExecutor ...