为什么我们在继承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区别 |枚举接口的更多相关文章

  1. Asp.Net IEnumerable,ICollection,IList,List区别

    做C#的同学们,都知道,一类只能有一个继承类,但可以实现多个接口.这句话就告诉我们:IEnumerable,ICollection,IList,List区别了 首先我看看 IEnumerable: / ...

  2. IEnumerable,ICollection,IList,List区别

    做C#的同学们,都知道,一类只能有一个继承类,但可以实现多个接口.这句话就告诉我们:IEnumerable,ICollection,IList,List区别了 首先我看看 IEnumerable: / ...

  3. IEnumerable和IQueryable的区别以及背后的ExpressionTree表达式树

    关于IEnumerable和IQueryable的区别,这事还要从泛型委托Func<T>说起.来看一个简单的泛型委托例子: class Program { static void Main ...

  4. C# ~ 从 IEnumerable / IEnumerator 到 IEnumerable<T> / IEnumerator<T> 到 yield

    IEnumerable / IEnumerator 首先,IEnumerable / IEnumerator 接口定义如下: public interface IEnumerable /// 可枚举接 ...

  5. 可枚举接口的知识点(IEnumerable 接口)要使用foreach,就必须实现可枚举接口

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

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

  7. IEnumerable和IQueryable的区别

    转自:http://www.cnblogs.com/fly_dragon/archive/2011/02/21/1959933.html IEnumerable接口 公开枚举器,该枚举器支持在指定类型 ...

  8. 关于迭代器中IEnumerable与IEnumerator的区别

    首先是IEnumerable与IEnumerator的定义: 1.IEnumerable接口允许使用foreach循环,包含GetEnumerator()方法,可以迭代集合中的项. 2.IEnumer ...

  9. C#--IEnumerable 与 IEnumerator 的区别

    一. IEnumerator 解释:它是一个的集合访问器,使用foreach语句遍历集合或数组时,就是调用 Current.MoveNext()的结果. // 定义如下public interface ...

随机推荐

  1. 读书笔记http之第一章

    http TCP/IP协议各层: 应用层 决定了向用户提供应用服务时通信的活动. 比如 : FTP(FileTransferProtocol,文件传输协议)和DNS(DomainNameSystem, ...

  2. 云图说|DDS读写两步走,带您领略只读节点的风采

    摘要:为了扩展主节点的读请求能力,DDS提供具备独立连接地址的只读节点,适合独立系统直连访问,以缓解大量读请求给主节点造成的压力. 本文分享自华为云社区<[云图说]第235期 DDS读写两步走 ...

  3. Go 指针,标识符命名规范及关键字

    #### Go 指针,标识符命名规范,关键字,运算符回顾了一下之前写的文章,以及考虑到后期的内容较多, 从这篇开始逐渐增加文章内容; 这篇我们主要学习一Go 中的指针,标识符关键字以及运算符##### ...

  4. AOP-底层原理(JDK动态代理实现)

    AOP(JDK动态代理) 1,使用JDK动态代理,使用Proxy类里面的方法创建代理对象 (1)调用 newProxyInstance 方法 方法有三个参数 第一参数,类加载器 第二参数,增强方法所在 ...

  5. 不难懂-----type=number 去掉加减按钮并禁止鼠标滚轮滚动

    <style> /* 去除webkit中input的type="number"时出现的上下图标 */ input::-webkit-outer-spin-button, ...

  6. dp学习(五)

    与数学有关的dp. 22. 计数dp 23. 数位dp 其实这个可以归到计数dp? 24. 数论dp 25. 概率dp

  7. 如何在 Qt Creator 中应用 one dark pro 主题

    前言 Qt Creator 自带了几款主题,但是并不好看.在博客 <Qt Creator打造VScode one dark pro主题配色> 中给出了 one dark pro 主题的配置 ...

  8. AT2645 [ARC076D] Exhausted?

    解法一 引理:令一个二分图两部分别为 \(X, Y(|X| \le |Y|)\),若其存在完美匹配当且仅当 \(\forall S \subseteq X, f(S) \ge |S|\)(其中 \(f ...

  9. Windows点击更改适配器选项出现的网络连接为空

    前言:windows出现点击更改适配器选项出现的网络连接为空,一直找了很久,没有找到方法 解决方案: 1:点击状态: 2:点击网络重置 最后:电脑进行重启,即可.

  10. C程序:年转化天

    突然想算算自己到底活了多少天了,e,就是纯属为了好玩,毕竟咱作为一名C初学者还是要多练练的- 为了好玩,加了个密码登陆的,密码是521,还有就是不太懂时间获取... 具体闰年的判断方法: 代码如下: ...