2015-12-02 116 views
0

我是新来的编码,现在仍然在大学。对不起,如果这个问题以前已经问过,但我什么地方都看不到它。是否有可能为Arrays c#创建构造函数?

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

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

任何洞察力,为什么它是或不可能的将不胜感激!

感谢

+1

你的问题有点过于含糊。 “所以每次我创建一个新的数组时,我都可以自动执行代码?” < - 你想如何填充数组?在一个循环?从另一个你已经拥有的馆藏? –

+0

请勿使用不相关的标签。这是一个C#问题 - 它不应该有一个'java'标记。 –

+4

你能举一个你想要做什么的例子,不管它有多么错误?你是否想像'int []'和'float []'这样的数组,或者像'MyObject []'这样定义的新对象? –

回答

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()),以便调用者可以更懒惰地创建对象。

你也应该避免有这样做所有阵列,因为我可以保证它会导致问题为您或其他人在路上时,他们想不通为什么int[] arr = new int[3]是做额外的东西。你应该看看在这里正确地使用封装(即创建一个包装器/扩展/装饰器类)。

此外,集合的现有.NET类之一完全可以满足您的需求......请仔细研究这些类。

+1

从你的链接:*如果合适的话,从实例构造函数中抛出异常。* – chris

+0

啊,它的确如此。我混了一些东西,会编辑。 –

+0

干杯的答复丹这有助于:) – Sifer

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(); 
相关问题