c#在类构造函数中访问我的数组

c#在类构造函数中访问我的数组,c#,class,constructor,C#,Class,Constructor,我正在学习c#,并决定尝试创建一个功能正常的机会游戏,一部分一部分。 我之前创建了一个方法,可以创建一个随机(但可能效率低下)的自然数数组,该数组不会出现多次 然而,当我试图拼凑OOP时,我意识到如果我创建多个这样的数组,它们将是对象,因此应该由一个类创建 我在构造函数中创建了数组。但是,我无法从构造函数的类中或完全从另一个类中访问此数组 class randomArray { Random rng = new Random(); protected i

我正在学习c#,并决定尝试创建一个功能正常的机会游戏,一部分一部分。 我之前创建了一个方法,可以创建一个随机(但可能效率低下)的自然数数组,该数组不会出现多次

然而,当我试图拼凑OOP时,我意识到如果我创建多个这样的数组,它们将是对象,因此应该由一个类创建

我在构造函数中创建了数组。但是,我无法从构造函数的类中或完全从另一个类中访问此数组

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; }
类随机数组
{
随机rng=新随机();
受保护的整数数量;
受保护的整数范围;
公共随机数组(int amountOfNumbers,int rangeOfNumbers)
{
this.amountOfNumbers=amountOfNumbers;
this.rangeOfNumber=rangeOfNumber;
int[]randomizedaray=新的int[amountOfNumbers];
对于(int i=0;i
我认为我既不理解OOP的基本原理,也不理解如何利用类。

使数组成为实际类的成员,即属性

大概在这个时候,你应该仔细阅读一下

更新

public randomArray(int amountOfNumbers, int rangeOfNumbers)
{
    ...
    RandomizedArray = new int[amountOfNumbers]
    // do stuff here
使数组成为实际类的成员,即属性

大概在这个时候,你应该仔细阅读一下

更新

public randomArray(int amountOfNumbers, int rangeOfNumbers)
{
    ...
    RandomizedArray = new int[amountOfNumbers]
    // do stuff here

尽管@TheGeneral的响应包含了解决方案,并为您提供了更多关于OOP的文档。 我认为最好解释一下为什么你的代码不起作用


OOP中的每件事都有一个作用域(它可用的某个“区域”),对于OOP中的大多数事情来说,这个作用域都是用括号围起来的。 在本例中,作用域基于构造函数,这导致括号中声明的变量仅在括号内可用。除非使用类变量或属性之类的“外部”链接

公共类示例
{
//这是一个类变量,现在可以从类外部访问该变量
//定义。
公共变量;
//这是一个类属性,因为我们添加了get和set调用来生成
//自动获取和设置方法(内部)
public bool aClassProperty{get;set;}
公共示例()
{
//要设置类变量和属性,只需给它们一个值。
aclass变量=42;
aClassProperty=true;
//此变量在此函数范围之外不可用,
//这是因为您在此函数中声明了变量。
//因此,只要
//函数运行(或称为“在范围内”)。
int[]arr=新的int[10];
}
}
还要注意变量和属性之间的区别,每个OOP语言都包含变量。 但是属性实际上是变量的扩展,在这里访问和设置可以通过get和set方法的定义进行修改


我强烈建议您阅读与的答案相关的文档,因为它包含了更多关于OOP和C#本身的复杂性的信息。

尽管@TheGeneral的回复包含了解决方案,并为您提供了更多关于OOP的学习文档。 我认为最好解释一下为什么你的代码不起作用


OOP中的每件事都有一个作用域(它可用的某个“区域”),对于OOP中的大多数事情来说,这个作用域都是用括号围起来的。 在本例中,作用域基于构造函数,这导致括号中声明的变量仅在括号内可用。除非使用类变量或属性之类的“外部”链接

公共类示例
{
//这是一个类变量,现在可以从类外部访问该变量
//定义。
公共变量;
//这是一个类属性,因为我们添加了get和set调用来生成
//自动获取和设置方法(内部)
public bool aClassProperty{get;set;}
公共示例()
{
//要设置类变量和属性,只需给它们一个值。
aclass变量=42;
aClassProperty=true;
//此变量在此函数范围之外不可用,
//这是因为您在此函数中声明了变量。
//因此,只要
//函数运行(或称为“在范围内”)。
int[]arr=新的int[10];
}
}
还要注意变量和属性之间的区别,每个OOP语言都包含变量。 但是属性实际上是变量的扩展,在这里可以使用定义修改访问和设置