-8

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 が機能せず、その理由がわかりません。それを修正する方法は?

4

2 に答える 2

2

編集:

int[]コンストラクターで定義のプレフィックスを削除するint[] masと、必要なフィールドの (見つけにくい) 定義をブロックするローカル変数が作成されますmas

編集2: コメントで説明したように、これは変数を定義する方法です。クラス自体ではなくコンストラクター内で定義することにより、コンストラクターの作業が完了した後は使用できないローカル変数を作成しました。

もう1つ注意すべき点は、フィールド/プロパティをクラスの一番上で定義する方がより実用的です。これにより、ここでのケースのような非表示のフィールドを探す必要がなくなります。

また、クラス変数とローカル変数について学ぶ必要があります。こちらをご覧になることをお勧めします。

変数とパラメーター

于 2013-07-08T13:09:47.377 に答える