是否可以为数组c#创建构造函数?

时间:2015-12-02 15:12:33

标签: c# arrays instances

我是编码新手,现在还在大学。对不起,如果之前已经问过这个问题,但我无法在任何地方看到它。

我很想知道是否可以为数组类创建一个构造函数,所以每次创建一个新数组时,我都可以执行代码,例如计算我在我的应用程序中为每个实例生成的数组的数量?我理解Array类是抽象的,所以你不能创建它的实例。

int []数组只是抽象Array类中的方法吗?

非常感谢任何关于它为何或不可能的见解!

由于

2 个答案:

答案 0 :(得分:0)

如果您的自定义代码只是填充数组,C#提供了几种内置方法来执行此操作(请参阅All possible C# array initialization syntaxes)。

如果你想在每次创建特定类型对象的实例时执行代码,你应该创建一个代表该对象的类(你也可以做一个扩展方法,但这可能会得到随着时间的推移而混淆)这个类可能只是一个数组的包装器:

public class MyArray<T>
{
    private T[] _array;

    public MyArray()
    {
        // execute your always must run code here!
    }

    public ArrVal
    {
       get { return _array; }
       set { _array = value; }
    }
}

...

MyArray<int> myArray = new MyArray<int>(); // your custom code gets executed when you new up the object here

但是,根据best practices,您应该避免在构造函数中执行太多工作的代码(根据我的经验,使用抛出异常的构造函数会导致一些难以调试的问题,尽管MSDN说抛出异常比掩盖异常更好。如果这段代码要进行密集的工作,最好创建一个单独的方法(可能是一个名为public void Initialize()的东西),这样调用者就可以更懒惰地新建对象。

您还应该避免尝试为所有阵列完成,因为我可以保证,当他们无法找出原因{{}时,它会给您或其他人造成问题{{ 1}}正在做额外的事情。你应该在这里寻找正确使用封装的方法(即创建一个包装器/扩展/装饰器类)。

此外,现有的.NET集合类之一完全有可能满足您的需求......请查看这些内容。

答案 1 :(得分:0)

我不确定我是否正确理解了您的问题,但如果您希望在创建数组时能够执行代码,则可以使用LINQ:

int[] myArray = new int[10]
    .Select((x, idx) => /*execute your code here*/).ToArray();

因此,您可以创建一个长度为10的数组,然后您可以为每个元素执行代码以确定要填充它的内容。

例如,您可以使用随机数字填充数组:

Random random = new Random();
int[] myRandomArray = new int[10]
    .Select((x, idx) => random.Next()).ToArray();