title: How does C# compilation get around needing header files?
body: <p>I've spent my professional life as a C# developer. As a student I occasionally used C but did not deeply study it's compilation model. Recently I jumped on the bandwagon and have begun studying Objective-C. My first steps have only made me aware of holes in my pre-existing knowledge.</p>
  
  <p>From my research, C/C++/ObjC compilation requires all encountered symbols to be pre-declared. I also understand that building is a two-step process. First you compile each individual source file into individual object files. These object files might have undefined "symbols" (which generally correspond to the identifiers declared in the header files). Second you link the object files together to form your final output. This is a pretty high-level explanation but it satisfies my curiosity enough. But I'd also like to have a similar high-level understanding of the C# build process.</p>
  
  <p><strong>Q:</strong> How does the C# build process get around the need for header files? I'd imagine perhaps the compilation step does two-passes?</p>
  
  <p>(Edit: Follow up question here <a href="https://stackoverflow.com/questions/1920555/how-do-c-and-c-compare-when-it-comes-to-using-libraries">How do C/C++/Objective-C compare with C# when it comes to using libraries?</a>)</p>