Доступ к массиву из другого класса

451
13 февраля 2017, 13:21

Здравствуйте, только начала изучать C#, столкнулся с такой проблемой.

Нужно инициализировать массив и его размер с клавиатуры, а потом открыть доступ к нему и его элементам для другого класса.

Нерабочий код:

namespace ConsoleApplication1
{
class MainClass
{
    static void Main()
    {
        Massive instance = new Massive();
        Console.WriteLine("Размер массива: ");
        instance.Size = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine(instance.Size);
        instance.Input();
        instance.Output();
        Console.ReadKey();
    }
}
class Massive
{
    int i;
    int size = 0;
    int []mass = new int[size]; //инициализатор поля не может обращаться к нестатическому полю 
    public int Size
    {
        set
        {
            size = value;
        }
        get
        {
            return size;
        }
    }
    public void Input()
    {
        for (i = 0; i < size; i++)
        {
            Console.WriteLine("Введите элемент массива: ");
            mass[i] = Convert.ToInt32(Console.ReadLine());
        }
    }
    public void Output()
    {
        for (i = 0; i < size; i++)
        {
            Console.Write(" "+mass[i]);
        }
    }
}
class Massive2 : Massive
{
    //доступ к массиву и его элементам с класса Massive
}
}

Обновлённый код

        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        using System.Threading.Tasks;
        namespace ConsoleApplication1
        {
        class MainClass
        {
        static void Main()
        {
        Massive instance = new Massive();
        Console.WriteLine("Размер массива: ");
        instance.Size = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine(instance.Size);
        instance.Input();
        instance.Output();
        Massive2 instance2 = new Massive2();
        Console.WriteLine();
        instance2.Method();
        Console.ReadKey();
    }
}

class Massive
{
    int[] mass = null;
    int i;
    public int Size
    {
        set
        {
            if (value > 0)
                mass = new int[value];
            else
                mass = null;
        }
        get
        {
            return (mass != null) ? mass.Length : 0;
        }
    }
    public int this[int index]
    {
        get { return mass[index]; } //ошибка здесь
        set { mass[index] = value; }
    }
    public void Input()
    {
        for (int i = 0; i < Size; i++)
        {
            Console.WriteLine("Введите элемент массива: ");
            mass[i] = Convert.ToInt32(Console.ReadLine());
        }
    }
    public void Output()
    {
        for (i = 0; i < Size; i++)
        {
            Console.Write(" " + mass[i]);
        }
    }

}
class Massive2 : Massive
{
    public void Method()
    {
        //доступ к массиву и его элементам с класса Massive
        int test = this[4];
        Console.WriteLine(test);
    }
}

}

Answer 1
class Massive
{
  int i;
  int size = 0;
  int []mass = null; 
  public int Size
  {
    set
    {
      size = value;
      // check for size > 0
      mass = new int[size];
    }
    get
    {
      return size;
    }
  }
  public int this[int index]
  {
    get { return mass[index]; }
    set { mass[index] = value } 
  }
  ...

Можно обойтись без поля size, а использовать сам массив для получения его длины:

class Massive
{
  int []mass = null; 
  public int Size
  {
    set
    {
      if (value > 0)
        mass = new int[value];
      else
        mass = null;
    }
    get
    {
      return (mass != null)? mass.Length : 0;
    }
  }
  public int this[int index]
  {
    get { return mass[index]; }
    set { mass[index] = value } 
  }
  public void Input()
  {
    for (int i = 0; i < Size; i++)
    {
      Console.WriteLine("Введите элемент массива: ");
      mass[i] = Convert.ToInt32(Console.ReadLine());
    }
  }
  ...

Update

static void Main()
{
  Massive2 instance2 = new Massive2();
  Console.WriteLine("Размер массива: ");
  instance2.Size = Convert.ToInt32(Console.ReadLine());
  Console.WriteLine(instance2.Size);
  instance2.Input();
  instance2.Output();
  instance2.Method();
  Console.ReadKey();
}
READ ALSO
Есть проблема с \t

Есть проблема с \t

Здравствуйте, уважаемыеС помощью ответов из предыдущего вопроса я немного усовершенствовал свой код

285
Xamarin Android совет новичку

Xamarin Android совет новичку

Вопросов несколько:

356
Как отправить ответ в командную строку сразу после команды?

Как отправить ответ в командную строку сразу после команды?

В примере показано как работает код, но нужно чтобы ответ приходил не следующей командой, а продолжением запроса

339