Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以为数组c#创建构造函数?_C#_Arrays_Instances - Fatal编程技术网

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

是否可以为数组c#创建构造函数?,c#,arrays,instances,C#,Arrays,Instances,我对编码还不熟悉,目前还在上大学。对不起,如果以前有人问过这个问题,我在任何地方都看不到 我想知道是否有可能为array类创建一个构造函数,因此每次创建一个新数组时,我都可以执行一些代码,比如计算我在应用程序中为每个实例创建的数组数量?我知道Array类是抽象的,所以不能创建它的实例 int[]数组只是抽象数组类中的方法吗 任何关于它为什么可能或不可能的见解都将不胜感激 谢谢如果您的自定义代码只是为了填充数组,C#提供了几种内置方法(请参阅) 如果您希望在每次创建特定类型对象的实例时都执行代码,

我对编码还不熟悉,目前还在上大学。对不起,如果以前有人问过这个问题,我在任何地方都看不到

我想知道是否有可能为array类创建一个构造函数,因此每次创建一个新数组时,我都可以执行一些代码,比如计算我在应用程序中为每个实例创建的数组数量?我知道Array类是抽象的,所以不能创建它的实例

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

任何关于它为什么可能或不可能的见解都将不胜感激


谢谢

如果您的自定义代码只是为了填充数组,C#提供了几种内置方法(请参阅)

如果您希望在每次创建特定类型对象的实例时都执行代码,那么应该创建一个表示该对象的类(您也可以使用扩展方法,但随着时间的推移,这可能会变得混乱)。此类可能只是数组的包装器:

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
公共类MyArray
{
专用T[]_数组;
公共MyArray()
{
//在这里执行您必须始终运行的代码!
}
公共到达
{
获取{返回_数组;}
设置{u数组=值;}
}
}
...
MyArray MyArray=新建MyArray();//在此处新建对象时,将执行自定义代码
但是,根据,您应该避免在构造函数中使用工作过多的代码(根据我的经验,使用抛出异常的构造函数可能会导致一些难以调试的问题,尽管MSDN说抛出异常比掩盖异常更好)。如果这段代码要做大量的工作,那么最好创建一个单独的方法(可能称为
public void Initialize()
),这样调用者就可以更懒洋洋地创建对象

您还应该避免尝试对所有数组执行此操作,因为我可以保证,如果您或其他人不明白为什么
int[]arr=new int[3]
正在执行额外的操作,那么这将给您或其他人带来问题。您应该在这里正确使用封装(即创建包装器/扩展/装饰器类)


另外,现有的.NET集合类完全有可能满足您的需要。。。仔细研究这些问题。

我不确定是否正确理解了您的问题,但如果您希望在创建数组时能够执行代码,则可以使用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();

你的问题有点太模糊了。“所以每次创建新数组时,我都可以自动执行代码?”请不要使用不相关的标记。这是一个c#问题-它不应该有
java
标记。你能举一个例子说明你在尝试做什么,不管它有多错吗?你想使用像
int[]
float[]
这样的数组,还是你定义的像
MyObject[]
这样的新对象?也许可以回答你的问题……当然,std::array有一个构造函数。再也没有人能修复C数组了。从你的链接:如果合适的话,从实例构造函数中抛出异常。啊,确实如此。我弄错了一些东西,将进行编辑。为丹的回答欢呼,这有助于:)