我需要在C#中创建Massive类,我尝试了这段代码,但它确实无法正常工作
using System;
namespace Massiv1
{
class Program
{
static void Main(string[] args)
{
Console.Write("n = ");
int n = Convert.ToInt32(Console.ReadLine());
Massiv mas = new Massiv(n);
mas.ShowAll();
Console.Write("i = ");
int i = Convert.ToInt32(Console.ReadLine());
mas.ShowElement(i);
Console.ReadLine();
}
}
class Massiv
{
public Massiv(int n)
{
int[] mas = new int[n];
Random rand = new Random();
for (int i = 0; i < mas.Length; ++i)
{
mas[i] = rand.Next(0, 10);
}
}
public void ShowAll()
{
foreach (var elem in mas)
{
Console.Write(elem + " ");
}
Console.WriteLine();
}
public void ShowElement(int index)
{
try
{
Console.WriteLine("index {0} mas{1} = ", index, mas[index]);
}
catch (NullReferenceException)
{
Console.WriteLine("Error!");
}
}
public int this[int index]
{
get { return mas[index]; }
set { mas[index] = value; }
}
private int[] mas;
}
}
我的方法ShowAll不起作用,我不明白为什么。如何解决?
答案 0 :(得分:11)
替换
int[] mas = new int[n];
与
mas = new int[n];
您想要使用您的字段 - 现在您正在将构造函数中的数据分配给局部变量,这在ShowAll
方法中不可用。
答案 1 :(得分:2)
修改强>
在构造函数中删除你的定义int[]
的{{1}}前缀,它会创建一个局部变量来阻止你想要int[] mas
的字段定义(很难找到)。
编辑2: 正如我在评论中所解释的那样,这就是你如何定义一个变量,通过在构造函数中而不是在类本身中这样做,你创建了一个局部变量,在完成构造函数的工作后不可用。
另外需要注意的是,在类的顶部定义字段/属性是更好的方法,这样可以避免查找隐藏字段,例如此处的情况。
另外,您应该了解类变量和局部变量,我建议看一下: