我已阅读过有关具有索引器和名为“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://dev59.com/hm435IYBdhLWcg3w9FLi#5110449并没有解释为什么我可以有多个索引器。
Item
属性的返回类型更改为除了int
和string
之外的其他类型,它会编译通过,但事实并非如此。看起来编译器不允许在class
/struct
中声明索引器时拥有显式的Item
属性。谁知道为什么呢?这很奇怪。 - Dan