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 ...
随机推荐
- a 标签一些特殊用法
发邮件 <a href="mailto:youemail@mail.com?subject=邮件标题&body=邮件内容">告诉我们</a> 打电话 ...
- 写react项目需要注意的
key应该是稳定的,且唯一的,尽量不要用索引作为key 都知道React组件渲染列表时需要为每个列表元素分配一个在列表中独一无二的key,key可以在DOM中的某些元素被增加或删除视乎帮助React识 ...
- jsp 4-14 知识总结
二 string类型 装换 boolean 的方法? 三 attribute对象 set 和 get 的用法 四 jsp 的四种属性范围? 五 jsp <% %> 和 ...
- eureka 集群的实现方式?
注意,本文还是对上一篇博客的延续,需要的配置,在前面的博客里面可以找到. eureka集群版 (正宗的eureka!) 2.1.配置eureka的集群之前首先先配置HOSTNAME和IP的映射 具体的 ...
- Ubuntu 配置数据库开发环境(mysql oracle mssqlserver sybase)
1.mysql sudo apt-get install libmysql++-dev //mysql连接库 2.ms sql server/sybase ./configure --prefix=/ ...
- 细说string和stringbuffer
========================================================================================= 在我看来,学习jav ...
- [ACM]Link-Cut Tree实现动态树初探
动态树问题是指的一类问题,而不是具体指的某一种数据结构.它主要维护一个包含若干有根树的森林,实现对森林的修改和查询等. 实现动态树的数据结构据说主要有4种,Link-Cut Tree是其中的一种.Li ...
- openstack horizon 学习(3) DataTable
上一篇中粗略的讲了下openstack中horizon的dashboard和panel的添加,本打算在这章中对有关于pluggable settings中的配置做详细的总结,然放弃了这念头.原因是搞懂 ...
- linux内存不足时,为了防止报错,可以使用swap
1. 创建分区文件, 大小 2G dd if=/dev/zero of=/swapfile bs=1k count=2048000 2. 生成 swap 文件系统 mkswap /swapfile 3 ...
- python进阶(24)Python字典的底层原理以及字典效率
前言 问题1:python中的字典到底是有序还是无序 问题2:python中字典的效率如何 python字典底层原理 在Python 3.5以前,字典是不能保证顺序的,键值对A先插入字典,键值对B ...