在C#中可以实例化带有值的类吗?

时间:2019-04-23 12:51:40

标签: c# arrays class instantiation

在C#中可以实例化带有值的类吗?也就是说,如果一个类包含一个数组,是否可以创建一个在实例化该类时传递所需数组长度的类?

3 个答案:

答案 0 :(得分:3)

是的

最明显的方法是使用类的构造函数:

class X
{
    public int[] MyArray
    {
         get;
         set;
    }

    public X(int arrayLength)
    {
         MyArray = new int[arrayLength];
    }
}

您现在可以使用以下方法实例化它:

X myX = new X(5);

您还可以使用其属性实例化一个类:

class X
{
    public int[] MyArray
    {
         get;
         set;
    }

    public int ArrayLength
    {
        set
        {
             MyArray = new int[value];
        }
    }
}

并按如下方式调用它:

X myX = new X { ArrayLength = 5};

我会选择第一个选项...

答案 1 :(得分:2)

public class MyClass
{
    private readonly string[] _myArray;

    public MyClass(int arrayLength)
    {
        _myArray = new string[arrayLength];
    }
}


var myClass = new MyClass(5);

答案 2 :(得分:0)

您可以将长度作为构造函数参数传递。构造函数看起来像是与类同名的方法,但是没有返回类型(甚至没有void)。

public class MyClass
{
    public MyClass(int arrayLength)
    {
        MyArray = new string[arrayLength];
    }

    public string[] MyArray { get; }
}

此解决方案使用仅吸气剂属性。您可以在构造函数中或使用属性初始值设定项对其进行初始化,但是一旦创建了对象,则该对象为只读。

您可以像这样创建MyClass对象:

var obj = new MyClass(10);
string firstElementOfArray = obj.MyArray[0];
string lastElementOfArray = obj.MyArray[9];

但是,请选择比MyClassMyArray更好的名称。真实姓名必须提供信息。一个类可以命名为StudentVehicleInvoice。数组可以命名为GradesPassengersInvoiceLineItems

但是根据您的要求,该数组可能只是一个私有字段,无法从类外部访问。