C# 如何给类一个可以被类方法访问的数组?

C# 如何给类一个可以被类方法访问的数组?,c#,oop,C#,Oop,我刚刚开始学习OOP。我正在创建自己的类,它构建在一个数组上。它有一个名为length的属性和一个具有该长度的数组 但是,length的实际值仅在构造函数中声明,因此我的数组在构造函数中被固定为私有变量 我如何实现一个数组,使数组具有特定的用户选择的长度,并且能够被类的方法访问 public class myClass { private int length; //This is an attribute of my class public myClass(int myLen

我刚刚开始学习OOP。我正在创建自己的类,它构建在一个数组上。它有一个名为length的属性和一个具有该长度的数组

但是,length的实际值仅在构造函数中声明,因此我的数组在构造函数中被固定为私有变量

我如何实现一个数组,使数组具有特定的用户选择的长度,并且能够被类的方法访问

public class myClass
{
    private int length; //This is an attribute of my class
    public myClass(int myLength)
    {
            length = myLength;
            int[] myArray = new int[length];
    }
}
我希望myArray可以访问,但这是不可能的,因为它是构造函数中的局部变量。我想如果用Python,我可以把它变成一个全局变量。(尽管我认为我仍然希望保持这个数组私有,因为它也是一个属性)

谢谢


注意:这不是家庭作业,而是我一直在挑战自己要做的事情。

修改答案,因为您在问题中添加了更多代码:

你无意中解决了自己的问题。看看你的
私有整数长度声明。在使用构造函数
public myClass(int myLength)
初始化对象之后,
length
变量仍然可以在对象中访问

下面的示例代码有一个新的
public int GetLengthPlusOne()
方法来访问长度变量。类似地,现在可以在另一种方法中使用
myArray
变量

肌类 类名 关于命名约定的旁注:
对于C#,类名称以大写开头(
MyClass
),而类实例以小写开头(
MyClass
)。查看更多信息。

以下是您的类的外观,OOP方式:

public class MyClass
{
    public readonly int Length;
    public int[] Data { get; private set; }

    public MyClass(int dataLength)
    {
        Length = dataLength;
        Data = new int[dataLength];
    }
}
在这里:

  • 数据
    数组是用用户指定的长度构造的
  • 您可以从类内外访问
    长度
    数据
  • 一旦实例化,
    Length
    属性就无法修改
另一种方法是使
Length
直接返回数组的
Length
属性,只要它是实例化的:

public class MyClass
{
    public int Length { get { return Data == null ? 0 : Data.Length; } }
    public int[] Data { get; private set; }

    public MyClass(int dataLength)
    {
        Data = new int[dataLength];
    }
}

到目前为止你都试了些什么?嘿,我们不应该帮你做作业!;-)如果你想改变数组的长度,你可能需要考虑使用<代码>列表>代码>,因为数组是一个固定长度的数据类型。但是如果没有任何代码,真的很难说。@mast3rd3mon我已经编辑了这个问题-我知道我的帖子写得不是最好的be@s这不是我的家庭作业……公共领域通常被认为是一种不好的做法。如果需要在类之外访问数组,则应改用a属性。@EdwinChua感谢您的回复,但它似乎不起作用。我找到了一个解决方案,用静态int-length替换私有int-length。我不知道这有什么区别,但我即将研究它,所以不要投我的反对票;)@Ezra在同一类的所有实例之间共享静态变量,而该类的每个实例都有自己的非静态变量副本。有关更多信息,请参阅此问题:此答案在许多层面上都不正确。您不应该将变量调用为属性,不应该创建表示属性getter的方法,这仍然不能回答如何将数组声明为实例级字段的问题。顺便说一下,
int[]myArray;=新整数[长度]甚至都没有compile@CamiloTerevinto我修改了我的答案,将“属性”替换为“变量”。我必须验证你所说的关于
int[]myArray;=新整数[长度]。如果我对数组构造函数有误解,请查看并告诉我。。。
public class MyClass
{
    public readonly int Length;
    public int[] Data { get; private set; }

    public MyClass(int dataLength)
    {
        Length = dataLength;
        Data = new int[dataLength];
    }
}
public class MyClass
{
    public int Length { get { return Data == null ? 0 : Data.Length; } }
    public int[] Data { get; private set; }

    public MyClass(int dataLength)
    {
        Data = new int[dataLength];
    }
}