c # Доступ к моему массиву внутри конструктора класса - PullRequest
0 голосов
/ 17 октября 2019

Я изучаю c # и решил попытаться создать работающую случайную игру, часть за частью. Ранее я создал метод, который создавал бы случайный (но, вероятно, неэффективный) массив натуральных чисел, который появлялся бы не более одного раза.

Однако, пытаясь собрать воедино ООП, я понял, что при создании нескольких из нихмассивы они будут объектами, поэтому должны быть созданы классом.

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

class randomArray
    {

        Random rng = new Random();
        protected int amountOfNumbers;
        protected int rangeOfNumbers;

        public randomArray(int amountOfNumbers, int rangeOfNumbers)
        {
            this.amountOfNumbers = amountOfNumbers;
            this.rangeOfNumbers = rangeOfNumbers;
            int[] randomizedArray = new int[amountOfNumbers];

            for (int i = 0; i < amountOfNumbers; i++)
            {
                randomizedArray[i] = rng.Next(1, rangeOfNumbers + 1);
                // A test to ensure that each new number generate is not 
                already part of the array.
                for (int j = 0; j < i; j++)
                {
                    while (randomizedArray[i] == randomizedArray[j])
                    {
                        randomizedArray[i] = rng.Next(1, rangeOfNumbers + 1);
                        j = 0;
                    }
                    if (randomizedArray[i] != randomizedArray[j])
                        continue;

                }
            }
        }

        public int RangeOfNumbers { get; set; }
        public int AmountOfNumbers { get; set; }

Мне кажется, что я не понимаю либо основ ООП, либо не понимаю, как использоватьклассы.

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Сделайте ваш массив членом фактического класса , то есть свойство

public class randomArray
{

    public int[] RandomizedArray { get; set; }

    ...

Примерно в это время вам, вероятно, следуетпрочитайте это

Обновление

public randomArray(int amountOfNumbers, int rangeOfNumbers)
{
    ...
    RandomizedArray = new int[amountOfNumbers]
    // do stuff here
0 голосов
/ 17 октября 2019

Несмотря на то, что ответ @TheGeneral содержит решение и указывает вам больше документации для изучения ООП. Я думаю, что лучше дать объяснение , почему ваш код не работал.


Все в ООП имеет область действия (определенную "область", где она доступна), что, для большинства вещей в ООП, огорожена скобками. В этом случае область действия основана на конструкторе, который позволяет переменным, объявленным в скобках, быть доступными только внутри скобок. За исключением случаев, когда вы используете «внешнюю» ссылку, такую ​​как переменная класса или свойство.

public class Example
{
    // this is a class variable, this variable is now reachable from outside the class 
    // definition.
    public int aClassVariable;

    // this is a class property which because we added the get and set calls generate 
    // automatically an get and set method (internally)
    public bool aClassProperty { get; set; }

    public Example()
    {
        // to set the class variable and property you just give them a value.
        aClassVariable = 42;
        aClassProperty = true;

        // this variable is not available outside the scope of this function, 
        // this is because you declared the variable inside this function.
        // So the variable is only available inside this function as long as this 
        // function runs (or as it is called "is in scope").
        int[] arr = new int[10]; 
    }
}

Также обратите внимание на различия между переменными и свойствами, переменная - это то, что содержится в каждом языке ООП. Но свойства на самом деле являются расширением для переменных, где доступ и настройку можно изменить с помощью определения метода get и set.

Я бы настоятельно рекомендовал прочитать документацию, связанную с ответом Общее , поскольку оно содержит гораздо больше информации о тонкостях ООП и самого C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...