IEnumerable< T >和IEnumerable区别 |枚举接口
为什么我们在继承IEnumerable< T >接口的时候也要实现IEnumerable接口。
新的代码里面都用IEnumerable< T >,因为泛型的类型是安全的。我们可以以类型安全的方式进行迭代,并在周围传播该信息。如果我将IEnumerable返回给您,则您可以放心地假定从它返回的所有内容都是字符串引用或null。使用IEnumerable,我们必须有效地强制转换(通常隐式地在foreach语句中)从序列返回的每个元素,因为IEnumerator的Current属性只是object类型。至于为什么我们仍然需要IEnumerable的原因-从根本上讲,旧接口永远不会消失。现有太多代码在使用它。IEnumerator< T >的 属性 Current是T类型。所以使用泛型
枚举接口是类型安全的不需要特别处理。
在使用IEnumerable< T >接口时,接口函数是隐式接口实现,IEnumerable 是以显示接口实现避免的两个接口的冲突
public class ClassX:IEnumerable<Person>
{
public ClassX()
{ }
public ClassX(string className)
{
this.ClassName = className;
}
public string ClassName { get; set; }
public List<Person> AllPersons= new List<Person>(); public IEnumerator<Person> GetEnumerator()
{
//显示接口实现前面不能有任何访问修饰符,且只能通过接口引用,不能通过实例引用。//显示接口成员的访问级别暗中是public,
//不允许程序员再加任何修饰符。现在大部分的系统为了保证扩展性,都广泛地使用接口。显式实现接口,可以隐藏具体类的复杂性。
return (IEnumerator<Person>)AllPersons.GetEnumerator();
} IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
} public void Add(Person Per)
{
if(Per is not null)
AllPersons.Add(Per); }
public override string ToString()
{
return $"{ClassName}";
} }
IEnumerable< T >和IEnumerable区别 |枚举接口的更多相关文章
- Asp.Net IEnumerable,ICollection,IList,List区别
做C#的同学们,都知道,一类只能有一个继承类,但可以实现多个接口.这句话就告诉我们:IEnumerable,ICollection,IList,List区别了 首先我看看 IEnumerable: / ...
- IEnumerable,ICollection,IList,List区别
做C#的同学们,都知道,一类只能有一个继承类,但可以实现多个接口.这句话就告诉我们:IEnumerable,ICollection,IList,List区别了 首先我看看 IEnumerable: / ...
- IEnumerable和IQueryable的区别以及背后的ExpressionTree表达式树
关于IEnumerable和IQueryable的区别,这事还要从泛型委托Func<T>说起.来看一个简单的泛型委托例子: class Program { static void Main ...
- C# ~ 从 IEnumerable / IEnumerator 到 IEnumerable<T> / IEnumerator<T> 到 yield
IEnumerable / IEnumerator 首先,IEnumerable / IEnumerator 接口定义如下: public interface IEnumerable /// 可枚举接 ...
- 可枚举接口的知识点(IEnumerable 接口)要使用foreach,就必须实现可枚举接口
- 从yield关键字看IEnumerable和Collection的区别
C#的yield关键字由来以久,如果我没有记错的话,应该是在C# 2.0中被引入的.相信大家此关键字的用法已经了然于胸,很多人也了解yield背后的“延迟赋值”机制.但是即使你知道这个机制,你也很容易 ...
- IEnumerable和IQueryable的区别
转自:http://www.cnblogs.com/fly_dragon/archive/2011/02/21/1959933.html IEnumerable接口 公开枚举器,该枚举器支持在指定类型 ...
- 关于迭代器中IEnumerable与IEnumerator的区别
首先是IEnumerable与IEnumerator的定义: 1.IEnumerable接口允许使用foreach循环,包含GetEnumerator()方法,可以迭代集合中的项. 2.IEnumer ...
- C#--IEnumerable 与 IEnumerator 的区别
一. IEnumerator 解释:它是一个的集合访问器,使用foreach语句遍历集合或数组时,就是调用 Current.MoveNext()的结果. // 定义如下public interface ...
随机推荐
- CAS基础
有锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题. (2)一个线程持有锁会导致其它所有需要此锁的线程挂起. (3)如果一个优先级高的线程等待一 ...
- ubuntu16.04同时使用 pyhton2.7和3.5,并随意切换
ubuntu16.04中默认已经安装了python2.7和python3.5 hanli@ubuntu:/usr/bin$ ls |grep python dh_python2 dh_python3 ...
- 字的研究(2)Fonttools-字体文件的解析
前言 本文主要介绍如果使用Python第三方库fontTools对TrueType字体文件(指使用TrueType描述轮廓的OpenType字体文件)的解析.修改和创建等操作. fontTools简介 ...
- 强化学习实战 | 自定义Gym环境之扫雷
开始之前 先考虑几个问题: Q1:如何展开无雷区? Q2:如何计算格子的提示数? Q3:如何表示扫雷游戏的状态? A1:可以使用递归函数,或是堆栈. A2:一般的做法是,需要打开某格子时,再去统计周围 ...
- pycharm 安装插件
1.使用pip安装插件 pip安装指定版本的插件: pip install openpyxl==2.6.2 -i https://pypi.doubanio.com/simple/ -i后面跟的是&q ...
- Elasticsearch(2) 数据搜索
本文介绍如何在Elasticsearch中对数据进行搜索. 1.简述 在Elasticsearch中的搜索中,有两类搜索: queries aggregations 区别在于:query可以进行全文搜 ...
- 深度学习快速参考 | iBooker·ApacheCN
原文:Deep Learning Quick Reference 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活原则 ...
- Git上传项目到码云提示Push rejected: Push to origin/master was rejected
感谢大佬:https://blog.csdn.net/weixin_41499217/article/details/82985582 Push rejected: Push to origin/ma ...
- js判断变量是否为空字符串、null、undefined
let _isEmpty = (input) => { return input + '' === 'null' || input + '' === 'undefined' || input.t ...
- 性能测试之监控--zabbix通过jmx监控tomcat
前提: 已经安装好了zabbix server 实验环境 Centos 7 Zabbix 3.0 Tomcat 7.0 JDK 1.8 安装JDK tar -zxvf jdk-8u181-linux- ...