Initialisation du tableau avec le constructeur par défaut
public class Sample
{
static int count = 0;
public int abc;
public Sample()
{
abc = ++Sample.count;
}
}
Je veux créer un tableau de classe ci-dessus, et que vous voulez chaque élément de la matrice être initialisé par l'invocation du constructeur par défaut, de sorte que chaque élément peut avoir différentes abc
.J'ai donc fait ceci:
Sample[] samples = new Sample[100];
Mais ce n'est pas faire ce que je pense qu'il doit faire. Il semble de cette façon, le constructeur par défaut n'est pas appelé. Comment appeler le constructeur par défaut lors de la création d'un tableau?
Je voudrais aussi savoir ce que fait la déclaration ci-dessus?
source d'informationauteur Nawaz
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas, dans le fond. Lorsque vous créez un tableau, c'est toujours d'abord renseignée avec la valeur par défaut pour le type qui, pour une classe est toujours une référence nulle. Pour
int
c'est 0, pourbool
c'est faux, etc.(Si vous utilisez un initialiseur de tableau, qui va créer le "vide" tableau et puis remplir avec les valeurs que vous avez spécifiées, bien sûr.)
Il y a différentes façons de remplir le tableau en appelant le constructeur - je probablement suffit d'utiliser une boucle foreach moi-même. L'utilisation de LINQ avec Énumérable.Gamme/Répétition se sent un peu obligé.
Bien sûr, vous pouvez toujours écrire votre propre population, même comme une extension de la méthode:
Ensuite, vous pouvez utiliser:
Ce que j'aime à propos de cette solution:
Bien sûr, vous pouvez ajouter plus d'options:
Func<int, T>
au lieu d'unFunc<T>
en passant l'index sur le fournisseur deVotre code ne crée que l' tableaumais aucun de ses éléments. Fondamentalement, vous avez besoin de stocker les instances de
Sample
en ce tableau.Pour faire simple, sans aucune fantaisie LINQ etc.:
Veuillez également noter que votre solution est pas thread-safe.
Il n'y a aucun moyen de le faire automatiquement; initialisation de tableau est essentiellement "effacer ce bloc de mémoire à 0". Vous devez faire quelque chose comme:
À ce stade, vous avez un tableau vide de taille 100, si vous voulez le remplir avec des articles, alors que vous auriez à faire quelque chose comme:
Le problème est qu'en déclarant que le tableau, vous n'avez jamais l'espace alloué pour chaque objet. Il vous suffit d'espace alloué pour les 100 objets de type de l'Échantillon. Vous aurez à appeler le constructeur sur chaque vous-même.
D'élaborer:
Un travail intéressant autour de peut-être une fonction de fabrication. Pensez à attacher à votre Échantillon de classe.
Cache la tache, un peu - la fourniture de ce est une fonction utile pour vous.
Voici un autre one-liner qui ne nécessite aucune méthode d'extension:
Une autre option intéressante est Scott suggestion à Jon répondre:
De sorte que vous pouvez faire: