I'm not sure if this exact question has been asked before, but all I could find were questions about how to work with GameComponent, or why something wasn't working.
I understand that you overload the Initialize, Draw, and Update methods with your own code, and XNA will then invoke them when the time is right. But what exactly is the purpose of Initialize? If you're writing something that extends from GameComponent, why wouldn't you just put all your initialize logic in the constructor?
For example, if my classes have a reference type that needs to be initialized, such as a collection or dictionary, I make of point of doing so in the constructor, and this pattern follows me into my GameComponent class design.
EDIT: Having worked with it a bit more, it looks like the primary purpose is to allow for more flexibility.
IGameComponent merely exposes one method --
Initialize() -- and by implementing this, you are allowed to plug it into the
Game.Components collection. This means that
GameComponent, with all of its various properties, even the reference to
Game, is just an implementation detail.
Another use I've found is when one component contains a collection of other components. In this case, the constructor for the container is called, and you now have empty collections. This pattern allows you to populate the collections, then call the initialize on both the parent and children objects.
I'm still stumped as to what I would specifically put into Initialize, but I understand the reasoning behind it.