If you declare a method of a class or a structure, only one piece of code implementing this method is created, one per all instances. Why? Well… just because OOP wasn't created by idiots. :-)
Now, the question is: the same method called on different instances of the same calls apparently does different job, well, because it works with different instance. The question is simple: it works exactly as a static methods, with one simple difference: it has one extra parameter which is implicitly passed to a method; and this parameter is a reference to that very instance. And guess what is this? This is a parameter "this".
For some more explanations, please see my past solution:
What makes static methods accessible?[
^].
One more interesting fact: .NET code is JIT-compiled. When the code is compiled to the native CPU instructions? In fact, it is compiled on demand on per-method basic. If some method are linked into the assembly but never called, this method will never be JIT-compiled during the whole run time.
[EDIT]
Read this article for in-depth information on creating the run-time objects behind the scene:
http://msdn.microsoft.com/en-us/magazine/cc163791.aspx[
^].
—SA[I have no idea why so much white space is rendered below — SA]