It’s not mandatory for a user-defined class to define a constructor. If one is not defined, the compiler will automatically generate a constructor. This internal constructor will just call the constructor of the class’ base class. (E.g. The constructor in System.Object).

You can use the IL DASM tool to inspect the code for your class and see this automatically generated constructor.

For example, let’s say that we have a Dog class that does not define a constructor. Below is an image of the IL DASM, showing the metadata for the Dog class. Note that it shows the following elements in the class:

Instance methods in a class can access static data or call static methods. The instance method accesses static data or methods in the same way that other code does–by using the class name to qualify the data or method name.

Here’s an example, where the Dog.Bark instance method makes use of the private static Dog.FormatTheCreed method:

A static method in a class is similar to an instance method, except that it acts upon the class’ static data–fields and properties–rather than on the instance data stored with a single instance of the class.

There is only one copy of each static data item, no matter how many instances of the class exist.