La question est sur les structures. Quand je déclare une variable de type struct/object (ne sait pas lequel correspond le mieux) ou un tableau ou une liste de structs, dois-je appeler le constructeur explicitement comme des objets ou juste déclarer suffira comme des variables?Pour les structures, dois-je appeler le constructeur explicitement en C#?
Répondre
Les structures en C# peuvent être créées avec ou sans invocation d'un constructeur. Dans le cas où aucun constructeur n'est appelé, les membres du struct seront initialisés aux valeurs par défaut (essentiellement remis à zéro), et le struct
ne peut pas être utilisé tant que tous ses champs ne sont pas initialisés.
De la documentation:
Lorsque vous créez un objet à l'aide struct le nouvel opérateur, il est créé et le constructeur approprié est appelé. Contrairement aux classes, les structures peuvent être instanciées sans utiliser le nouvel opérateur . Si vous n'utilisez pas new, les champs restent non affectés et l'objet ne peut pas être utilisé tant que tous les champs ne sont pas initialisés.
Voici quelques exemples:
struct Bar
{
public int Val;
public Bar(int v) { Val = v; }
}
public void Foo()
{
Bar z; // this is legal...
z.Val = 5;
Bar q = new Bar(5); // so is this...
q.Val = 10;
// using object initialization syntax...
Bar w = new Bar { Val = 42; }
}
Les tableaux de struct sont différentes d'une seule variable struct. Lorsque vous déclarez un tableau d'un type struct vous déclarez une variable de référence - en tant que tel, vous devez allouer à l'aide de l'opérateur new
:
Bar[] myBars = new Bar[10]; // member structs are initialized to defaults
Vous pouvez également choisir d'utiliser la syntaxe d'initialisation de tableau si votre struct a un constructeur :
Bar[] moreBars = new Bar[] { new Bar(1), new Bar(2) };
Vous pouvez obtenir plus sophistiqué que cela. Si votre struct
a un opérateur de conversion implicite d'un type primitif, vous pouvez l'initialiser comme ceci:
struct Bar
{
public int Val;
public Bar(int v) { Val = v; }
public static implicit operator Bar(int v)
{
return new Bar(v);
}
}
// array of structs initialized using user-defined implicit converions...
Bar[] evenMoreBars = new Bar[] { 1, 2, 3, 4, 5 };
Je suis gêné de dire que j'ai développé en C# pendant deux ans et jamais utilisé ou même rencontré le mot clé implicite! – Pierreten
Struct est un Value Type
en C#, il utilise la mémoire pile plutôt que Heap.
Vous pouvez déclarer une variable struct de la façon régulière int a = 90;
par exemple,
int est un type struct en C#.
Si vous utilisez l'opérateur new
, le constructeur correspondant sera appelé.
- 1. RÉFLEXION C# pour appeler un constructeur
- 2. Utiliser memset sur les structures en C++
- 3. Comment puis-je appeler le constructeur?
- 4. Comment puis-je appeler dynamiquement un constructeur en C#?
- 5. C++ invoquer le constructeur de modèle explicite
- 6. Opérations atomiques en C++ pour les structures sans verrou
- 7. Octet mou dans les structures en C
- 8. Utilisation d'un délégué pour appeler un constructeur
- 9. Comment appeler le constructeur avec call_user_func_array en PHP
- 10. Pourquoi les structures statiques ne sont pas autorisées en C#?
- 11. appeler un constructeur d'un autre en Java
- 12. Puis-je appeler un constructeur surchargé d'un autre constructeur de la même classe en C#?
- 13. - appeler un constructeur d'un autre
- 14. Comment éviter d'appeler explicitement un constructeur lors du passage d'un objet temporaire par référence en C++?
- 15. C++: initialiseur de constructeur pour les tableaux
- 16. pour appeler C# form en viusal C++
- 17. structures d'opérateurs logiques en C#
- 18. Appelez C dll fonctions, structures et rappels en C#
- 19. Comment marshaller des structures en C#?
- 20. comment appeler l'opérateur() en C++
- 21. convertir des structures en c en pywin32?
- 22. Utiliser Fortran pour appeler les fonctions C++
- 23. constructeur Résumé en C#
- 24. C# Héritage: Comment appeler le constructeur de la classe de base quand j'appelle le constructeur de la classe dérivée
- 25. Comment appeler d'autres constructeurs d'un constructeur dans C#?
- 26. étranges problèmes de constructeur/copie de constructeur C++ en g ++
- 27. Méthode de filtrage pour les structures de données C++
- 28. Sérialisation de structures complexes en C++
- 29. Structures de données C#
- 30. Constructeur statique équivalent en Objective-C?
Vous ne savez pas si vous demandez également si vous avez besoin de renouveler le conteneur (par exemple, la liste), mais la réponse est oui. :) –
Dave