首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一个关于索引器的有关问题 this[] VS get_Item()

2012-03-13 
一个关于索引器的问题 this[] VS get_Item()今天无意中翻到chengbo的一篇面试随笔:面试新蛋题目看成了:如

一个关于索引器的问题 this[] VS get_Item()
今天无意中翻到chengbo的一篇面试随笔:   面试新蛋
题目看成了:如下代码能否编译成功
public   int   this[int   index]  
{
        get   {   return   1;}
}

public   int   get_Item(int   index)  
{
        return   1;
}

想想既然是这么问了,那肯定编译不过呢.理由,自己想想应该是因为编译器在将代码编译成IL的时候索引器this翻译为get_Item的.
自己在IDE里试了下,编译的错误提示果然是: "Error   1   Type   'WindowsTest.Form1 '   already   defines   a   member   called   'get_Item '   with   the   same   parameter   types ".如果是平时怕是根本想不到这个层面的.

不过话又说回来,编译器为什么要做这个限制的,   只是个名字翻译而已嘛.
再试了下Property,结果也是有这个限制的.

期待高手解惑

[解决办法]
保留的关键字吧
[解决办法]
也许是这些名字翻译就是固定死的呢
[解决办法]
肯定不行,看看.NET 框架程序设计就知道了
[解决办法]
呵呵………………
public int this[int index]
{
get { return 1;}
}
这个在编译时会修改成下面的样子:
public int get_Item(int index)
{
return 1;
}
所以,这不是限制,而是重复定义。
[解决办法]
唉,那么说就是固定死了呢...我觉得编译器完全能做的更智能一点,,难道微软认为没有必要?
不过出现这种情况肯定很少,谁会去定义一个 get_Item方法呢,,但这个限制看上去却又感觉不爽

这个不是限制,同一个类的两个方法肯定不能具有相同的签名,貌似1.1里面还是可以的,2.0把这个修复了。

倒不是因为微软不想智能,只是这样做与其它语言的兼容性就会更好,例如Java。微软可以自己发明一套Attribute来让这些可以任意取名,例如匿名方法的处理,但这样对其他不支持属性或索引器的语言就会造成困惑。

热点排行