In C#, when you do
Class(Type param1, Type param2):base(param1)
is the constructor of the class executed first, and then the superclass constructor is called or does it call the base constructor first?
In C#, when you do
Class(Type param1, Type param2):base(param1)
is the constructor of the class executed first, and then the superclass constructor is called or does it call the base constructor first?
It will call the base constructor first. Also keep in mind that if you don't put the :base(param1)
after your constructor, the base's empty constructor will be called.
Your question is a bit unclear but I'm assuming you meant to ask the following
When to I call the base constructor for my XNA object vs. using the impilict default constructor
The answer to this is highly dependent on both your scenario and the underlying object. Could you clarify a bit wit the following
TerrainCollision
?My best answer though is that in the case where you have parameters that line up with the parameters of the base class`s constructor, you should almost certainly be calling it.
[Edit: in the time it took me to answer, the question had totally changed].
The answer is that it calls the base first.
[Original answer to the old question below]
Are you asking when you would do the "base" bit of the constructor call?
If so, you would "chain" a call to the constructor base if the class is derived from another class which has this constructor:
public class CollisionBase
{
public CollisionBase(Body body, GameObject entity)
{
}
}
public class TerrainCollision : CollisionBase
{
public TerrainCollision(Body body, GameObject entity)
: base(body, entity)
{
}
}
In this example, TerrainCollision
derives from CollisionBase
. By chaining the constructors in this way, it ensures the specified constructor is called on the base class with the supplied parameters, rather than the default constructor (if there is one on the base)
The order is:
Then starting with the most derived class:
Foo() : this(...)
etcNote that in Java, the base class is initialized before variable initializers are run. If you ever port any code, this is an important difference to know about :)
I have a page with more details if you're interested.