大家好,请问这个属性是什么意思?一个属性是IEnumerable<>泛型接口类型是什么意思?

shuxiaolele 2016-02-20 11:52:48
public override IEnumerable<ModuleReference> Modules
{
get
{
// Please fill this method with your modules with lines like this:
//yield return new ModuleReference(typeof(Module));
yield return new ModuleReference(typeof(HelloModule));
yield return new ModuleReference(typeof(HelloModule2));
}
}

首先我想问,属性是IEnumerable<>泛型接口 类型是什么意思?为什么属性可以是接口类型?

为什么这段代码不写成public override list<ModuleReference> Modules

但是我拿到的这段代码,经常用IEnumerable<>泛型接口当成类型修饰符,为什么要这么用呢?这是我十分困惑的


还有这里面的get方法中,yield return是什么意思,他到底在做什么?

这个属性Modules上文中并没有对应的私有字段。

同时,这个属性方法get里只是yield return,并没有出现类似_modules=new ModuleReference(typeof(Module));这样的语句

还有想知道这样的属性想调用是怎么调用呢
...全文
429 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuxiaolele 2016-02-24
  • 打赏
  • 举报
回复
引用 11 楼 gxmark 的回复:
[quote=引用 3 楼 shuxiaolele 的回复:] 有哪位大神能讲讲么?用泛型接口做类型是什么意思?
我感觉你这里是理解错误,其中并不是泛型接口做类型。实际上Modules是一个对象,并不是一个类型。也就说这里是定义了一个满足泛型接口要求的对象。 对你的其它内容我说说我的理解,希望对你有帮助: //首先我想问,属性是IEnumerable<>泛型接口 类型是什么意思?为什么属性可以是接口类型? 属性是一个对象,只是通过类型修饰符来进行定义。 //为什么这段代码不写成public override list<ModuleReference> Modules IEnumerable<T>与LINQ紧密相连,优于list<T> //但是我拿到的这段代码,经常用IEnumerable<>泛型接口当成类型修饰符,为什么要这么用呢?这是我十分困惑的 这里体现了IEnumerable<T>的通用性和优越性 //还有这里面的get方法中,yield return是什么意思,他到底在做什么? 这是以迭代的方式生成了一个集合,使用yield return 是编译器对迭代器做的优化。 //这个属性Modules上文中并没有对应的私有字段。 编译器会自动生成私有字段,是C#3.0以上的一个特性,叫“自动实现的属性”,可以减少编程人员的编码量 //同时,这个属性方法get里只是yield return,并没有出现类似_modules=new ModuleReference(typeof(Module));这样的语句 yield return new ModuleReference(typeof(HelloModule2));在这里已经进行实现。如果是对Modules有疑问的话,其实 很多对象并不需要显式初始化,编译器或者设计人员已经隐式完成了。 //还有想知道这样的属性想调用是怎么调用呢 正常像其它属性一样就行了[/quote] 非常感谢您的回复,有一点仍然不明白的是,在这行代码public override list<ModuleReference> Modules中,ModuleReference是指的一个类型么。
引用 11 楼 gxmark 的回复:
[quote=引用 3 楼 shuxiaolele 的回复:] 有哪位大神能讲讲么?用泛型接口做类型是什么意思?
我感觉你这里是理解错误,其中并不是泛型接口做类型。实际上Modules是一个对象,并不是一个类型。也就说这里是定义了一个满足泛型接口要求的对象。 对你的其它内容我说说我的理解,希望对你有帮助: //首先我想问,属性是IEnumerable<>泛型接口 类型是什么意思?为什么属性可以是接口类型? 属性是一个对象,只是通过类型修饰符来进行定义。 //为什么这段代码不写成public override list<ModuleReference> Modules IEnumerable<T>与LINQ紧密相连,优于list<T> //但是我拿到的这段代码,经常用IEnumerable<>泛型接口当成类型修饰符,为什么要这么用呢?这是我十分困惑的 这里体现了IEnumerable<T>的通用性和优越性 //还有这里面的get方法中,yield return是什么意思,他到底在做什么? 这是以迭代的方式生成了一个集合,使用yield return 是编译器对迭代器做的优化。 //这个属性Modules上文中并没有对应的私有字段。 编译器会自动生成私有字段,是C#3.0以上的一个特性,叫“自动实现的属性”,可以减少编程人员的编码量 //同时,这个属性方法get里只是yield return,并没有出现类似_modules=new ModuleReference(typeof(Module));这样的语句 yield return new ModuleReference(typeof(HelloModule2));在这里已经进行实现。如果是对Modules有疑问的话,其实 很多对象并不需要显式初始化,编译器或者设计人员已经隐式完成了。 //还有想知道这样的属性想调用是怎么调用呢 正常像其它属性一样就行了[/quote] 还有个问题想请教您,请问用IEnumerable<T>做属性或方法的类型修饰符主要是为了干什么,是想让这个属性或方法干什么才这样用的
Poopaye 2016-02-21
  • 打赏
  • 举报
回复
gxmark 2016-02-21
  • 打赏
  • 举报
回复
引用 3 楼 shuxiaolele 的回复:
有哪位大神能讲讲么?用泛型接口做类型是什么意思?
我感觉你这里是理解错误,其中并不是泛型接口做类型。实际上Modules是一个对象,并不是一个类型。也就说这里是定义了一个满足泛型接口要求的对象。 对你的其它内容我说说我的理解,希望对你有帮助: //首先我想问,属性是IEnumerable<>泛型接口 类型是什么意思?为什么属性可以是接口类型? 属性是一个对象,只是通过类型修饰符来进行定义。 //为什么这段代码不写成public override list<ModuleReference> Modules IEnumerable<T>与LINQ紧密相连,优于list<T> //但是我拿到的这段代码,经常用IEnumerable<>泛型接口当成类型修饰符,为什么要这么用呢?这是我十分困惑的 这里体现了IEnumerable<T>的通用性和优越性 //还有这里面的get方法中,yield return是什么意思,他到底在做什么? 这是以迭代的方式生成了一个集合,使用yield return 是编译器对迭代器做的优化。 //这个属性Modules上文中并没有对应的私有字段。 编译器会自动生成私有字段,是C#3.0以上的一个特性,叫“自动实现的属性”,可以减少编程人员的编码量 //同时,这个属性方法get里只是yield return,并没有出现类似_modules=new ModuleReference(typeof(Module));这样的语句 yield return new ModuleReference(typeof(HelloModule2));在这里已经进行实现。如果是对Modules有疑问的话,其实 很多对象并不需要显式初始化,编译器或者设计人员已经隐式完成了。 //还有想知道这样的属性想调用是怎么调用呢 正常像其它属性一样就行了
  • 打赏
  • 举报
回复
yield return 这个关键字你不能去查下的…… 我都懒得给你贴链接 msdn查下就知道了
shuxiaolele 2016-02-21
  • 打赏
  • 举报
回复
引用 7 楼 qq_34038955 的回复:
1.Enumerable<>泛型接口 类型 -- 答:就是指一个数据的结构,比如int型,string型, 2.为什么属性可以是接口类型 答: 既然属性可以是int型。为什么不可以是接口类型。它只代表一个数据结构。 3.为什么这段代码不写成public override list<ModuleReference> Modules 答:list《T》已经实现了Enumerable<>泛型接口 。如果用list。 把 new ModuleReference(typeof(HelloModule)); new ModuleReference(typeof(HelloModule2)); 添加到list里面。直接调用foreach效果等同上面的代码。 至于为什么不用list。这个不得而知,不过list<t>的内部实现也是 调用 yield return ; 4.yield return是什么意思。 楼上https://msdn.microsoft.com/zh-cn/library/dscyy5s0.aspx贴出的写得很详细。 你只需要知道这个是语法,语法是什么?就是一套c#设计出来就已经规定好的编码规则。 整个代码执行的结果就是调用foreach遍历Modules时依次返回 new ModuleReference(typeof(HelloModule))。 new ModuleReference(typeof(HelloModule2));
非常感谢
shuxiaolele 2016-02-21
  • 打赏
  • 举报
回复
引用 7 楼 qq_34038955 的回复:
1.Enumerable<>泛型接口 类型 -- 答:就是指一个数据的结构,比如int型,string型, 2.为什么属性可以是接口类型 答: 既然属性可以是int型。为什么不可以是接口类型。它只代表一个数据结构。 3.为什么这段代码不写成public override list<ModuleReference> Modules 答:list《T》已经实现了Enumerable<>泛型接口 。如果用list。 把 new ModuleReference(typeof(HelloModule)); new ModuleReference(typeof(HelloModule2)); 添加到list里面。直接调用foreach效果等同上面的代码。 至于为什么不用list。这个不得而知,不过list<t>的内部实现也是 调用 yield return ; 4.yield return是什么意思。 楼上https://msdn.microsoft.com/zh-cn/library/dscyy5s0.aspx贴出的写得很详细。 你只需要知道这个是语法,语法是什么?就是一套c#设计出来就已经规定好的编码规则。 整个代码执行的结果就是调用foreach遍历Modules时依次返回 new ModuleReference(typeof(HelloModule))。 new ModuleReference(typeof(HelloModule2));
哇,讲的好透彻
shuxiaolele 2016-02-21
  • 打赏
  • 举报
回复
引用 2 楼 shingoscar 的回复:
那我贴个链接吧 https://msdn.microsoft.com/zh-cn/library/dscyy5s0.aspx
非常感谢,您的
引用 6 楼 qbilbo 的回复:
IEnumerable是指可用foreach遍历的“集合”。 yield return你可以理解为一个虚的结果,只有在foreach内部真正用到某个结果时,才会给真的。 不用List是因为没必要。 假设有一卖火柴的小女孩,一毛钱一把(5根)。这一把就是IEnumerable<火柴>,大多数情况下你只要能从这把里一根一根的拿出来用好,沒必要在每根火柴上贴上标签,再装入盒子。 yield return相当于你买一把火柴后,并没有马上拿到,而是在用的时候(比如:点烟)时,小女孩才一根一根给你。(只要在5根用完前把烟点着,那小女孩就赚了。)
我晕,你讲的太形象了。 真的,你要是写书绝对好。我看了那么多,都是模模糊糊的,你一句话就把我搞清楚了
qq_34038955 2016-02-21
  • 打赏
  • 举报
回复
1.Enumerable<>泛型接口 类型 -- 答:就是指一个数据的结构,比如int型,string型, 2.为什么属性可以是接口类型 答: 既然属性可以是int型。为什么不可以是接口类型。它只代表一个数据结构。 3.为什么这段代码不写成public override list<ModuleReference> Modules 答:list《T》已经实现了Enumerable<>泛型接口 。如果用list。 把 new ModuleReference(typeof(HelloModule)); new ModuleReference(typeof(HelloModule2)); 添加到list里面。直接调用foreach效果等同上面的代码。 至于为什么不用list。这个不得而知,不过list<t>的内部实现也是 调用 yield return ; 4.yield return是什么意思。 楼上https://msdn.microsoft.com/zh-cn/library/dscyy5s0.aspx贴出的写得很详细。 你只需要知道这个是语法,语法是什么?就是一套c#设计出来就已经规定好的编码规则。 整个代码执行的结果就是调用foreach遍历Modules时依次返回 new ModuleReference(typeof(HelloModule))。 new ModuleReference(typeof(HelloModule2));
qbilbo 2016-02-21
  • 打赏
  • 举报
回复
IEnumerable是指可用foreach遍历的“集合”。 yield return你可以理解为一个虚的结果,只有在foreach内部真正用到某个结果时,才会给真的。 不用List是因为没必要。 假设有一卖火柴的小女孩,一毛钱一把(5根)。这一把就是IEnumerable<火柴>,大多数情况下你只要能从这把里一根一根的拿出来用好,沒必要在每根火柴上贴上标签,再装入盒子。 yield return相当于你买一把火柴后,并没有马上拿到,而是在用的时候(比如:点烟)时,小女孩才一根一根给你。(只要在5根用完前把烟点着,那小女孩就赚了。)
shuxiaolele 2016-02-21
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
yield return 这个关键字你不能去查下的…… 我都懒得给你贴链接 msdn查下就知道了
您好,我想问的问题主要是:首先我想问,属性是IEnumerable<>泛型接口 类型是什么意思?为什么属性可以是接口类型? 为什么这段代码不写成public override list<ModuleReference> Modules
shuxiaolele 2016-02-21
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
yield return 这个关键字你不能去查下的…… 我都懒得给你贴链接 msdn查下就知道了
查了,我没看懂。我是问这段代码写了是什么意思,不是说某个语法
shuxiaolele 2016-02-21
  • 打赏
  • 举报
回复
有哪位大神能讲讲么?用泛型接口做类型是什么意思?

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧