none
Как лучше реализовать массив с разными типами элементов? RRS feed

  • Вопрос

  • Есть несколько классов. Надо создать массив, в котором будут экземпляры этих классов (или нескольких из них). В одном массиве должны быть экземпляры разных классов, заранее неизвестно, сколько экземпляров какого-либо класса будет, экземпляры каких классов будут, в каком они будут порядке. Массив должен быть одномерный. Элементы одного типа не обязательно расположены друг за другом. Как реализовать такой массив?
    У меня такие мысли
    1. Делать массив Object[] и создавать objectarray[0]=new class1(); objectarray [1]=new class2();. Однако создавая элементы массива, я не получаю доступ к полям и методам классов.
    2. Сделать отдельный общий класс, и все остальные сделать наследуемыми ему. Делаю массив элементов общего класса (от которого все остальные наследуются), экземпляры остальных классов создаются в массиве, но я получаю доступ только к полям и методам общего класса, а полей и методов наследуемых классов нет.
    Подскажите, как выйти из этого положения? Проблема НЕ в применении public, private и т. д. (все поля и методы помечены public)
    • Перемещено Siddharth Chavan 1 октября 2010 г. 22:44 MSDN Forums Consolidation (От:Visual C#)
    9 января 2010 г. 10:37

Ответы

  • Возможно ArrayList подойдет?

    ArrayList myArrayList = new ArrayList();
    myArrayList.Add(new class1(1));
    myArrayList.Add(new class1(2));
    myArrayList.Add(new class2(3));
    myArrayList.Add(new class2(4));
    foreach (object cl in myArrayList)
    {
        if (cl is class1)
        {
            Console.WriteLine(((class1)cl).r);
        }
        if (cl is class2)
        {
            Console.WriteLine(((class2)cl).g);
        }
    }

    9 января 2010 г. 12:51

Все ответы

  • Возможно ArrayList подойдет?

    ArrayList myArrayList = new ArrayList();
    myArrayList.Add(new class1(1));
    myArrayList.Add(new class1(2));
    myArrayList.Add(new class2(3));
    myArrayList.Add(new class2(4));
    foreach (object cl in myArrayList)
    {
        if (cl is class1)
        {
            Console.WriteLine(((class1)cl).r);
        }
        if (cl is class2)
        {
            Console.WriteLine(((class2)cl).g);
        }
    }

    9 января 2010 г. 12:51
  • Возможно ArrayList подойдет?

    ArrayList myArrayList = new ArrayList();
    
    myArrayList.Add(new class1(1));
    
    myArrayList.Add(new class1(2));
    
    myArrayList.Add(new class2(3));
    
    myArrayList.Add(new class2(4));
    
    foreach (object cl in myArrayList)
    
    {
    
        if (cl is class1)
    
        {
    
            Console.WriteLine(((class1)cl).r);
    
        }
    
        if (cl is class2)
    
        {
    
            Console.WriteLine(((class2)cl).g);
    
        }
    
    }
    
    


    Да, подойдет. Можно и object[], только надо для доступа к полям и методом  использовать ((class1)objectarray[0]).метод(); ((class2)objectarray[1]).поле=значение; Главное - приведение типов. Спасибо большее за пример.
    9 января 2010 г. 13:48