Проблема перегрузки индексатора в C # - PullRequest
0 голосов
/ 26 мая 2010

У меня возникла проблема при перегрузке свойства индексатора.

public class ClassName 
{
    private int[] a;
    private int[] b;
    private string[] c;
    private string[] d;

    public int this[int pos]
    {
        get{ return a[pos];}
        set{a[pos] = value;}
    }
    public int this[int pos]
    {
        get{ return b[pos];}
        set{b[pos] = value;}
    }
    public int this[int pos]
    {
        get{ return c[pos];}
        set{c[pos] = value;}
    }
    public int this[int pos]
    {
        get{ return d[pos];}
        set{d[pos] = value;}
    }
}

Я получаю Error 1 'Class1 variables' already defines a member called 'this' with the same parameter types

Подскажите пожалуйста, как это реализовать?

Ответы [ 3 ]

3 голосов
/ 26 мая 2010

Вы определили это [] с одной и той же подписью (принимая int, возвращая int) несколько раз.

Как компилятор знает, какой взять?

Лучше сделайте ваши массивы Свойства (на этот раз индексированные свойства действительно пригодятся!)

И сделайте ваш метод set для ваших свойств закрытым, иначе они могут перезаписать массив вместо простого изменения значений.

Итак, чтобы помочь TS немного больше:

public class Test
{
    private string[] _a;
    private int[] _b;

    public string[] A
    {
        get { return this._a; }
        private set { this._a = value; }
    }

    public int[] B
    {
        get { return this._b; }
        private set { this._b = value; }
    }

    public Test()
    {
        // todo add ctor logic here
    }
}

// now you can do:

Test t = new Test();

t.A[1] = "blah"; // assuming that index of the array is defined.

Удачи

2 голосов
/ 26 мая 2010

Представьте, что этот индексатор вызывается другим классом:

ClassName myClass = new ClassName();
myClass[0]; // Which one???
1 голос
/ 26 мая 2010

Ошибка означает, что она говорит. У вас есть четыре свойства с одинаковой подписью.

Что ты пытаешься сделать? Покажите, что вы ожидаете, код с использованием ClassName будет выглядеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...