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

最新文章

  1. 使用二分法查找mobile文件中区号归属地
  2. 一天一小段js代码(no.2)
  3. hdu 5747 Aaronson
  4. Center os FTP配置
  5. Cache-control使用:header(&#39;Cache-control:private&#39;)
  6. C# 知识笔记
  7. java去掉List中的重复值代码
  8. 你好,C++(9)坐216路公交车去买3.5元一斤的西红柿——C++中如何表达各种数值数据 3.3 数值数据类型
  9. Qt中 QString 和int, char等的“相互”转换,关键是QString.toLocal8Bit().data();
  10. Python web框架有哪些
  11. 引用类型-----Object
  12. POJ 1733 Parity game 【带权并查集】+【离散化】
  13. 使用Zabbix监控RabbitMQ消息队列
  14. nvidia-smi failed because it couldn&#39;t communicate with the nvidia driver
  15. personalblog
  16. SQL Server 导入超大脚本
  17. egret性能优化总结
  18. Rhythmk 一步一步学 JAVA (19): 注解 annotation
  19. 使用Dragablz快速构建Chrome样式的可拖拽分离的Tab页程序
  20. 001-ant design pro 页面加载原理及过程,@connect 装饰器

热门文章

  1. Jmeter BeanShell 执行多次问题,每发送一次请求执行一次BeanShell问题
  2. 动态insert mybatis与ibatis
  3. ajax技术实现登录判断用户名是否重复以及利用xml实现二级下拉框联动,还有从数据库中获得
  4. AVR单片机教程——EasyElectronics Library v1.1手册
  5. Grafana 6.4 正式发布!
  6. MongoDB 学习笔记之 删除数据,集合,数据库
  7. 设计一个A表数据抽取到B表的抽取过程
  8. 项目二:企业级java电商网站开发(服务端)
  9. 控制器向视图传参ModelAndView、Model和Map
  10. angular4 httpclient拦截器