索引器优于对象数组的优点?

时间:2014-09-20 14:15:38

标签: c# arrays indexer

我在MSDN - Indexers中读到了关于索引器的内容,它解释了我们如何使用带索引的数组等对象,就像普通的数组一样。但是,我认为我们可以创建像

这样的对象数组
point[] array = new point[100];

那么Indexer对象数组的特殊优势是什么?

4 个答案:

答案 0 :(得分:5)

如果你所追求的只是一组对象,那么索引器对数组完全没有好处。但是,如果您需要存储状态以及集合,那么索引器就会闪耀。

例如,请考虑以下内容

public class Tree
{
    private Branch[] branches = new Branch[100];
    ...

    public string Name { get; set; }

    public Branch this[int i]
    {
        get
        {
            return branches[i];
        }
    }
}

Tree拥有一个内部集合,但也拥有它自己的状态。拥有索引器属性允许简单访问底层集合,例如

tree.Name = "Tree";
var branch = tree[0];

答案 1 :(得分:4)

不是你在上面提到的这种情况。但是,如果您有任何无法表示为数组的内容,则将成为使用Indexers的一个很好的示例。

一个.Net框架示例是Dictionary。如果你在.Net中看到字典类型的定义,你会发现它们让你通过密钥获得价值访问。所以这是使用索引器的一个很好的例子,索引以字符串形式呈现。

没有索引器,你会怎么做?当然通过索引值,但它不能是字符串类型然后,这将是用户友好的吗?我猜不会!

所以索引器让你有机会很好地代表你的代码。

enter image description here

同样,在点类型的情况下,您当然可以访问索引值,即0,1,2 ... 99。如果您想要提高用户友好性,例如点[" x"],该怎么办?这就是索引者会帮助你的地方。

另一个例子我可以考虑如果你想要像s 1而不是push和s [0]而不是pop方法那样访问你的堆栈。

Microsoft有一个非常好的索引器示例,您可以通过提供字符位置作为索引来逐字节访问文件。

http://msdn.microsoft.com/en-us/library/aa288465(v=vs.71).aspx

答案 2 :(得分:2)

在您的代码行中,您已经定义了point个对象的数组,无论它们是什么。

 point[] array = new point[100];

假设您可以直接访问数组,可以像下面这样访问数组中的第一个元素:

 var firstPoint = array[0];

您链接到的页面向您展示了如何访问该数组,如果它是在您的类中定义的,并且您没有直接访问该数组(因为它是私有的)。< / p>

例如,我们可以修改该页面上的示例以使用您的数组:

class SampleCollection
{
    private Point[] arr = new Point[100];

    public Point this[int i]
    {
        get { return arr[i]; }
        set { arr[i] = value; }
    }
}

然后你可以像这样访问数组中的第一个元素:

var sc = new SampleCollection();
var item1 = sc[0];

答案 3 :(得分:2)

那不是索引器。

索引器不用于创建对象数组,它实际上是'[]'运算符的运算符重载。

如果你想创建一个List包装类,可以使用它的一个例子。

为了保留方括号功能,您需要(并希望)覆盖方括号运算符。这是通过索引器方法完成的。