我刚开始学习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中我可以让它成为一个全局变量。 (虽然我认为我仍然希望保持这个数组是私有的,因为它也是一个属性)。
谢谢!
注意:这不是家庭作业,而是我一直在挑战自己的事情。
答案 0 :(得分:0)
以下是你的课程的样子,OOP方式:
public class MyClass
{
public readonly int Length;
public int[] Data { get; private set; }
public MyClass(int dataLength)
{
Length = dataLength;
Data = new int[dataLength];
}
}
这里:
Data
数组。Length
和Data
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];
}
}
答案 1 :(得分:-1)
修正了答案,因为您在问题中添加了更多代码:
你无意中解决了自己的问题。看看你的private int length;
声明。在使用构造函数public myClass(int myLength)
初始化对象之后,仍然可以在对象中访问length
变量。
下面的示例代码有一个新的public int GetLengthPlusOne()
方法来访问长度变量。同样,您现在可以在另一种方法中使用myArray
变量。
public class MyOtherClass
{
public void SampleMethod()
{
MyClass cls = new MyClass(5);
Console.WriteLine(cls.GetLengthPlusOne()); //Output: 6
var arr = cls.myArray;
}
}
public class MyClass
{
private int length; //This is an attribute of my class
/*
* Declaring this within the class instead of the constructor allows it
* to be persisted in an instance of the class. This is a property.
*/
public int[] myArray { get; set; }
public MyClass(int myLength)
{
length = myLength;
myArray = new int[length];
}
public int GetLengthPlusOne()
{
return length + 1;
}
}
对于C#,类名称开始大写(MyClass
),而类的实例以小写(myClass
)开头。有关详细信息,请查看the documentation。