En C#, lorsque vous faites
Class(Type param1, Type param2) : base(param1)
Le constructeur de la classe est-il exécuté en premier, puis le constructeur de la superclasse est appelé ou le constructeur de la base est-il appelé en premier ?
En C#, lorsque vous faites
Class(Type param1, Type param2) : base(param1)
Le constructeur de la classe est-il exécuté en premier, puis le constructeur de la superclasse est appelé ou le constructeur de la base est-il appelé en premier ?
L'ordre est le suivant :
Puis en commençant par la classe la plus dérivée :
Foo() : this(...)
etc.Notez qu'en Java, la classe de base est initialisée antes de les initialisateurs de variables sont exécutés. Si vous portez un jour du code, c'est une différence importante à connaître :)
J'ai un page avec plus de détails si vous êtes intéressé.
Il semble que la moitié de mes contributions ici renvoient à ses réponses, mais Eric Lippert a également écrit deux bons billets sur ce sujet : blogs.msdn.com/ericlippert/archive/2008/02/15/ blogs.msdn.com/ericlippert/archive/2008/02/18/
Y compris les effets des initialisateurs de collection, un peu plus en profondeur que la question peut-être, mais une bonne lecture.
+1 pour la comparaison avec Java. Je pense aussi que c'est le cas pour C++ mais je n'en suis pas sûr à 100%.
[Edit : dans le temps qu'il m'a fallu pour répondre, la question avait totalement changé].
La réponse est qu'il appelle la base en premier.
[Réponse originale à l'ancienne question ci-dessous]
Demandez-vous quand vous feriez la partie "base" de l'appel au constructeur ?
Si c'est le cas, vous "chaînerez" un appel au constructeur de base si la classe est dérivée d'une autre classe qui possède ce constructeur :
public class CollisionBase
{
public CollisionBase(Body body, GameObject entity)
{
}
}
public class TerrainCollision : CollisionBase
{
public TerrainCollision(Body body, GameObject entity)
: base(body, entity)
{
}
}
Dans cet exemple, TerrainCollision
provient de CollisionBase
. En enchaînant les constructeurs de cette manière, on s'assure que le constructeur spécifié est appelé sur la classe de base avec les paramètres fournis, plutôt que le constructeur par défaut (s'il en existe un sur la base).
Votre question est un peu floue, mais je suppose que vous vouliez demander ce qui suit
Quand dois-je appeler le constructeur de base de mon objet XNA plutôt que d'utiliser le constructeur par défaut impitoyable ?
La réponse à cette question dépend fortement de votre scénario et de l'objet sous-jacent. Pourriez-vous clarifier un peu les points suivants
TerrainCollision
?Ma meilleure réponse est que dans le cas où vous avez des paramètres qui correspondent aux paramètres du constructeur de la classe de base, vous devriez presque certainement l'appeler.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Je n'ai jamais utilisé XNA, mais je ne vois pas de question dans votre... question.
4 votes
C'est tout ? C'est tout ce que vous nous donnez comme base de travail ? Allez, donnez-nous un indice... animal, végétal, minéral ?
2 votes
J'ai appuyé sur le bouton trop vite xD... Désolé, j'étais encore en train d'écrire...
1 votes
Sur Spécification du langage C#