Q:

Do unassigned properties take up memory in a class?

This might be a bit of a noob question, but I need to ask it anyway. Consider the following two classes
public class Book{
    public string Title;
    public string Author;
    public string ISBN;
    public DateTime Published;
    public string Description;
    public string Genre;
    public float Price
    public int Pages;

    public Book(){
    }
}

public class BookStub{
    public string Title;
    public string Author;

    public BookStub(){
    }        
}

If I create an instance of each class in the following way 
Book a = new Book{ 
    Title = "Do Androids Dream of Electric Sheep?", 
    Author = "Philip K. Dick" 
};

BookStub b = new BookStub{ 
    Title = "Do Androids Dream of Electric Sheep?", 
    Author = "Philip K. Dick" 
};

Do both of these instances take up the same amount of memory? Or does the first one take up more? 

A:

Instances of the Book class will consume more memory than instances of the BookStub class because the memory required for all member variables is allocated when an object is first created.
This is necessary because at any time you could write
a.Price = 12.74F;

to set the value of the Price field. If the memory had not been allocated, this code would fail.
Such failure is not possible for object b of type BookStub, because it has no Price field. The compiler would easily detect that error.
So, to answer your question explicitly: yes, unassigned properties still consume memory for each instance of a class. They are simply initialized automatically to their default values.
Note, however, that this is only the case for member variables that must exist for each instance of an object. Both static fields and all types of methods (instance or static) are associated with the class itself and do not consume any additional memory each time a new instance is created. So feel free to add additional methods and static fields without worrying about increasing your memory footprint.

