"Item"属性以及索引器

Pio*_*fer 6 c# indexer properties

我已经阅读了带有索引器和名为"Item"的属性的Class的答案,但是他们没有解释为什么我可以有一个带有多个索引器的类,所有这些都创建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
    }
}
Run Code Online (Sandbox Code Playgroud)

对于两个索引器,创建了四种方法:

Int32 get_Item(String val)
Void set_Item(String val, Int32 value)
String get_Item(Int32 val)
Void set_Item(Int32 val, String value)
Run Code Online (Sandbox Code Playgroud)

我希望我的财产能够创造出来

Int32 get_Item()
Void set_Item(Int32 value)
Run Code Online (Sandbox Code Playgroud)

这些重载通常是可以接受的,但不知何故,编译器不会让我创建这样的属性.

请注意,我不需要重命名索引器等方法,这是已知的 - 我需要一个解释.这个答案:https://stackoverflow.com/a/5110449/882200并没有解释为什么我可以拥有多个索引器.