In the image below, because I have instantiated the ComoZoo field and then assigned its Capacity there is no null reference exception.
However, if I switch the lines of code and put the assigning of the Capacity field before the line of code that instantiates the ComoZoo field...
...and execute that line...
...I will get a null reference exception error telling me that the ComoZoo field is null. What this means is that while the ComoZoo field has been defined it is not yet an object in memory and so no actions can be taken with it.
A clearer example of this is shown in the image below. On line 25 I have instantiated a new instance of the Zoo class and assigned it to the ComoZoo field, making it an object in memory. On line 27 I have assigned the ComoZoo field to null, which then no longer makes it an object in memory. If line 29 were to execute, then, I would receive a null reference exception because the ComoZoo field is not an object in memory (null).
A key idea to remember about null reference exceptions is that they only occur when the null object is being used. A null object can be passed without problems, it's only when the 'dot' operator is used that errors will occur.