问一个小问题

weikeli19 2016-05-13 11:16:14
索引符的问题 请看下面代码:
public Animal this[int a]
{
get
{
return (Animal)List[a];
}
set
{
List[a]=value;
}
}
请问这里的List获取的IList对象名字是_items吗?

这是我查看了这个网页得出的结论 不知道对不对?
http://referencesource.microsoft.com/#mscorlib/system/collections/arraylist.cs,3e3f6715773d6643
...全文
167 14 打赏 收藏 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Poopaye 2016-05-13
  • 打赏
  • 举报
回复
引用 12 楼 weikeli19 的回复:
[quote=引用 7 楼 shingoscar 的回复:] CollectionBase.List这个属性会返回一个IList对象(就是它本身) 随后你对List使用[]运算符,就会调用CollectionBase中this[int index]的get选择器 这个选择器里会返回CollectionBase.InnerList[index] InnerList这个属性会返回CollectionBase.list字段 对InnerList使用[]运算符,就会调用ArrayList中this[int index]的get选择器 这个选择器里会返回ArrayList._items[index]
对了 你所说的 CollectionBase.List这个属性会返回一个IList对象(就是它本身) 就是它本身指的是CollectionBase抽象类吧?[/quote] 就是return this;
Poopaye 2016-05-13
  • 打赏
  • 举报
回复
引用 楼主 weikeli19 的回复:
请问这里的List获取的IList对象名字是_items吗? 这是我查看了这个网页得出的结论 不知道对不对? http://referencesource.microsoft.com/#mscorlib/system/collections/arraylist.cs,3e3f6715773d6643
weikeli19 2016-05-13
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
你这个类自身有个List集合对象,你的索引器只是将索引直接传入这个List而已,用的是List的索引
不是 这个List在这里是属性的意思 如果不是那么应该是什么对象名,还有List[a]=value;保存在ArrayList类的哪个方法或者哪个字段里?
weikeli19 2016-05-13
  • 打赏
  • 举报
回复
如果不是那么应该是什么对象名,还有List[a]=value;保存在ArrayList类的哪个方法或者哪个字段里?
  • 打赏
  • 举报
回复
你这个类自身有个List集合对象,你的索引器只是将索引直接传入这个List而已,用的是List的索引
weikeli19 2016-05-13
  • 打赏
  • 举报
回复
引用 10 楼 shingoscar 的回复:
[quote=引用 9 楼 weikeli19 的回复:] [quote=引用 7 楼 shingoscar 的回复:] CollectionBase.List这个属性会返回一个IList对象(就是它本身) 随后你对List使用[]运算符,就会调用CollectionBase中this[int index]的get选择器 这个选择器里会返回CollectionBase.InnerList[index] InnerList这个属性会返回CollectionBase.list字段 对InnerList使用[]运算符,就会调用ArrayList中this[int index]的get选择器 这个选择器里会返回ArrayList._items[index]
对了 这个public Animals this[int animalIndex] 到底是重载啊 还是 重写啊?它把Object类型改成了Animals类型[/quote] 都不是 重载要写override,重写会警告你缺少new[/quote] 你看这段代码: namespace delete { class Program { static void Main(string[] args) { B a = new B(); a.liweike(); } } interface A { } class B : A { public void liweike() { Console.WriteLine(((A)this).GetType()); } } }
weikeli19 2016-05-13
  • 打赏
  • 举报
回复
引用 7 楼 shingoscar 的回复:
CollectionBase.List这个属性会返回一个IList对象(就是它本身) 随后你对List使用[]运算符,就会调用CollectionBase中this[int index]的get选择器 这个选择器里会返回CollectionBase.InnerList[index] InnerList这个属性会返回CollectionBase.list字段 对InnerList使用[]运算符,就会调用ArrayList中this[int index]的get选择器 这个选择器里会返回ArrayList._items[index]
对了 你所说的 CollectionBase.List这个属性会返回一个IList对象(就是它本身) 就是它本身指的是CollectionBase抽象类吧?
weikeli19 2016-05-13
  • 打赏
  • 举报
回复
引用 10 楼 shingoscar 的回复:
[quote=引用 9 楼 weikeli19 的回复:] [quote=引用 7 楼 shingoscar 的回复:] CollectionBase.List这个属性会返回一个IList对象(就是它本身) 随后你对List使用[]运算符,就会调用CollectionBase中this[int index]的get选择器 这个选择器里会返回CollectionBase.InnerList[index] InnerList这个属性会返回CollectionBase.list字段 对InnerList使用[]运算符,就会调用ArrayList中this[int index]的get选择器 这个选择器里会返回ArrayList._items[index]
对了 这个public Animals this[int animalIndex] 到底是重载啊 还是 重写啊?它把Object类型改成了Animals类型[/quote] 都不是 重载要写override,重写会警告你缺少new[/quote] 我知道了 在自定义集合中它就是可以随意更改数据类型的是吧? 谢谢
Poopaye 2016-05-13
  • 打赏
  • 举报
回复
引用 9 楼 weikeli19 的回复:
[quote=引用 7 楼 shingoscar 的回复:] CollectionBase.List这个属性会返回一个IList对象(就是它本身) 随后你对List使用[]运算符,就会调用CollectionBase中this[int index]的get选择器 这个选择器里会返回CollectionBase.InnerList[index] InnerList这个属性会返回CollectionBase.list字段 对InnerList使用[]运算符,就会调用ArrayList中this[int index]的get选择器 这个选择器里会返回ArrayList._items[index]
对了 这个public Animals this[int animalIndex] 到底是重载啊 还是 重写啊?它把Object类型改成了Animals类型[/quote] 都不是 重载要写override,重写会警告你缺少new
weikeli19 2016-05-13
  • 打赏
  • 举报
回复
引用 7 楼 shingoscar 的回复:
CollectionBase.List这个属性会返回一个IList对象(就是它本身) 随后你对List使用[]运算符,就会调用CollectionBase中this[int index]的get选择器 这个选择器里会返回CollectionBase.InnerList[index] InnerList这个属性会返回CollectionBase.list字段 对InnerList使用[]运算符,就会调用ArrayList中this[int index]的get选择器 这个选择器里会返回ArrayList._items[index]
对了 这个public Animals this[int animalIndex] 到底是重载啊 还是 重写啊?它把Object类型改成了Animals类型
weikeli19 2016-05-13
  • 打赏
  • 举报
回复
引用 7 楼 shingoscar 的回复:
CollectionBase.List这个属性会返回一个IList对象(就是它本身) 随后你对List使用[]运算符,就会调用CollectionBase中this[int index]的get选择器 这个选择器里会返回CollectionBase.InnerList[index] InnerList这个属性会返回CollectionBase.list字段 对InnerList使用[]运算符,就会调用ArrayList中this[int index]的get选择器 这个选择器里会返回ArrayList._items[index]
太好了 讲得太好了 收藏了
Poopaye 2016-05-13
  • 打赏
  • 举报
回复
CollectionBase.List这个属性会返回一个IList对象(就是它本身) 随后你对List使用[]运算符,就会调用CollectionBase中this[int index]的get选择器 这个选择器里会返回CollectionBase.InnerList[index] InnerList这个属性会返回CollectionBase.list字段 对InnerList使用[]运算符,就会调用ArrayList中this[int index]的get选择器 这个选择器里会返回ArrayList._items[index]
weikeli19 2016-05-13
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
[quote=引用 楼主 weikeli19 的回复:] 请问这里的List获取的IList对象名字是_items吗? 这是我查看了这个网页得出的结论 不知道对不对? http://referencesource.microsoft.com/#mscorlib/system/collections/arraylist.cs,3e3f6715773d6643
对[/quote] 这段代码是这样子的: public class Animals : CollectionBase { public void Add(Animal newAnimal) { List.Add(newAnimal); } public void Remove(Animal newAnimal) { List.Remove(newAnimal); } public Animals this[int animalIndex] { get { return (Animal)List[animalIndex]; } set { List[animalIndex] = value; } } }
weikeli19 2016-05-13
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
[quote=引用 楼主 weikeli19 的回复:] 请问这里的List获取的IList对象名字是_items吗? 这是我查看了这个网页得出的结论 不知道对不对? http://referencesource.microsoft.com/#mscorlib/system/collections/arraylist.cs,3e3f6715773d6643
对[/quote] 可是private Object[] _items;是私有的啊,怎么能通过List[a]=value;传值进入私有的_items呢?我说的不是通过Add方法!!

111,128

社区成员

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

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

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