【问题标题】:Item property in c#C#中的项目属性
【发布时间】:2016-07-08 06:51:22
【问题描述】:

c# 中的 item 属性是否总是像 c# 中的索引器一样使用? 让我用example 解释一下。 ArrayList 有许多属性,如计数、容量,其中之一是 Item.Item 属性,它与通过在 ArrayList 名称后放置点来访问的计数和容量不同,它不是由关键字 Item 使用,而是由 Indexer 直接使用。 例如

ArrayList MyList = new ArrayList();
MyList.add(100);
MyList[0] = 200;

就像上面一样,例如使用 Item 关键字来定义索引器,而不是实现 Item 属性。

我的查询:我可以说,无论何时在 c# 中解释 Item 属性,都应该隐含地理解它指的是 Indexer 术语吗?

【问题讨论】:

    标签: c# indexer


    【解决方案1】:

    MyList[0] 是一个索引器,它使您可以像访问数组一样访问对象。定义语法是这样的:

    public T this[int index]
    {
       // reduced for simplicity
       set { internalArray[index] = value; }
       get { return internalArray[index]; }
    }
    

    编译器生成方法:

    public T get_Item(inde index)
    {
        return internalArray[index];
    }
    

    public void set_Item(inde index, T value)
    {
        internalArray[index] = value;
    }
    

    List.Add(something)List[0] = something 之间没有关系。第一个是将值附加到列表末尾的方法。第二个是调用方法List.set_Item(0, something)的语法糖。

    除非 CLR 直接支持 [] 语法(就像数组一样),否则它是在使用上述语法糖的类中定义的索引器。

    【讨论】:

    • 语法糖?这是什么意思,你能解释一下吗?
    • @PranitaJain 简而言之,我将语法糖视为编译器提供的语法快捷方式,让我们的生活更轻松。而编译器将其转换为正确的语法。比如你写array.ToList();编译器把它改成Enumerable.ToList(array);(顺便说一下这些是扩展方法)
    【解决方案2】:

    根据上面的文档,索引器定义如下。

    public virtual object this[
        int index
    ] { get; set; }
    

    更准确地说,实际上没有Item 属性,但索引器在文档中被称为“项目属性”。

    【讨论】:

      猜你喜欢
      • 2011-03-02
      • 2013-10-15
      • 2011-01-19
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多