【发布时间】:2013-06-20 14:06:02
【问题描述】:
我已经阅读了Class with indexer and property named "Item" 的答案,但他们没有解释为什么我可以有一个具有多个索引器的类,它们都创建了Item 属性和get_Item/set_Item 方法(当然工作好吧,因为它们是不同的重载),但我不能有明确的 Item 属性。
考虑代码:
namespace Test
{
class Program
{
static void Main(string[] args)
{
}
public int this[string val]
{
get
{
return 0;
}
set
{
}
}
public string this[int val] //this is valid
{
get
{
return string.Empty;
}
set
{
}
}
public int Item { get; set; } //this is not valid
}
}
对于两个索引器,创建了四个方法:
Int32 get_Item(String val)
Void set_Item(String val, Int32 value)
String get_Item(Int32 val)
Void set_Item(Int32 val, String value)
我希望我的财产能够创建
Int32 get_Item()
Void set_Item(Int32 value)
这些重载通常是可以接受的,但不知何故编译器不允许我创建这样的属性。
请注意,我不需要重命名索引器等的方法,这是已知的 - 我需要解释。这个答案:https://stackoverflow.com/a/5110449/882200 没有解释为什么我可以有多个索引器。
【问题讨论】:
-
我怀疑如果您要将
Item属性的返回类型更改为int和string以外的其他值,它会编译,但事实并非如此。如果您在class/struct中声明索引器,编译器似乎不允许您拥有显式的Item属性。谁知道为什么?这很奇怪。
标签: c# properties indexer