2015-12-02 1 views
0

Je suis novice dans le codage et je suis encore au collège en ce moment. Désolé si cette question a été posée auparavant mais je ne pouvais pas le voir n'importe où. Je me demandais s'il était possible de créer un constructeur pour la classe Class, donc chaque fois que je crée un nouveau tableau, je peux exécuter du code comme compter la quantité de tableaux que j'ai dans mon application pour chaque instance que je crée. Je comprends que la classe Array est abstraite, donc vous ne pouvez pas en faire une instance.Est-il possible de créer un constructeur pour Arrays C#?

Est-ce que int [] arrays est juste une méthode dans la classe Array abstraite?

Un aperçu de pourquoi c'est ou n'est pas possible serait grandement apprécié!

Merci

+1

Votre question est un peu trop vague. "donc chaque fois que je crée un nouveau tableau, je peux exécuter du code automatiquement?" <- comment voulez-vous remplir le tableau? En boucle? D'une autre collection que vous avez déjà? –

+0

Veuillez ne pas utiliser de tags non pertinents. C'est une question C# - elle ne devrait pas avoir de balise 'java'. –

+4

Pouvez-vous donner un exemple de ce que vous essayez de faire, peu importe à quel point c'est faux? Voulez-vous travailler avec des tableaux tels que 'int []' et 'float []', ou de nouveaux objets que vous définissez comme 'MyObject []'? –

Répondre

0

Si votre code personnalisé est juste pour remplir le tableau, C# fournit plusieurs construit façons de le faire (voir All possible C# array initialization syntaxes). Si vous souhaitez que le code s'exécute chaque fois que vous créez une instance d'un type particulier d'objet, vous devez créer une classe qui représente cet objet (vous pouvez également utiliser une méthode d'extension, mais cela devenir confus au fil du temps). Cette classe est peut-être rien de plus qu'une enveloppe autour d'un tableau:

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 

Cependant, par best practices, vous devriez éviter d'avoir le code dans un constructeur qui fait trop de travail (et dans mon expérience, d'avoir un constructeur qui lance des exceptions peut causer certains problèmes qui sont difficiles à déboguer, bien que MSDN dise qu'il vaut mieux jeter l'exception que de la couvrir). Si ce code doit faire un travail intensif, il peut être préférable de créer une méthode séparée (peut-être quelque chose appelé public void Initialize()) afin que les appelants puissent réécrire l'objet plus paresseusement.

Vous devriez également éviter d'essayer d'avoir ce fait pour tous les tableaux, parce que je peux vous garantir que ça va causer des problèmes pour vous ou quelqu'un d'autre sur la route quand ils ne peuvent pas comprendre pourquoi int[] arr = new int[3] fait des choses supplémentaires. Vous devriez chercher à utiliser correctement l'encapsulation ici (c'est-à-dire créer une classe wrapper/extension/decorator).

En outre, il est tout à fait possible que l'une des classes .NET existantes pour Collections répond à vos besoins ... Regardez-les.

+1

De votre lien: * Existe-t-il des exceptions pour les constructeurs d'instance, le cas échéant? * – chris

+0

Ahh, c'est le cas. J'ai mélangé quelque chose, je vais éditer. –

+0

Salutations pour la réponse Dan cela a aidé :) – Sifer

0

Je ne suis pas sûr si je comprends bien votre question, mais si vous voulez être en mesure d'exécuter du code lorsque vous créez un tableau, vous pouvez utiliser LINQ:

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

Vous pouvez créer un tableau de longueur 10, vous pouvez exécuter du code pour chaque élément pour déterminer ce que vous voulez le remplir.

Par exemple, vous pouvez remplir le tableau avec des nombres aléatoires en utilisant:

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