Здравствуйте, только начала изучать 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);
}
}
}
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();
}
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Здравствуйте, уважаемыеС помощью ответов из предыдущего вопроса я немного усовершенствовал свой код
В примере показано как работает код, но нужно чтобы ответ приходил не следующей командой, а продолжением запроса