创建类Massive C#

时间:2013-07-08 13:08:00

标签: c#

我需要在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不起作用,我不明白为什么。如何解决?

2 个答案:

答案 0 :(得分:11)

替换

int[] mas = new int[n];

mas = new int[n];

您想要使用您的字段 - 现在您正在将构造函数中的数据分配给局部变量,这在ShowAll方法中不可用。

答案 1 :(得分:2)

修改

在构造函数中删除你的定义int[]的{​​{1}}前缀,它会创建一个局部变量来阻止你想要int[] mas的字段定义(很难找到)。

编辑2: 正如我在评论中所解释的那样,这就是你如何定义一个变量,通过在构造函数中而不是在类本身中这样做,你创建了一个局部变量,在完成构造函数的工作后不可用。

另外需要注意的是,在类的顶部定义字段/属性是更好的方法,这样可以避免查找隐藏字段,例如此处的情况。

另外,您应该了解类变量和局部变量,我建议看一下:

Variables and parameters