<p>So C# now allows you to use <code>default(Foo)</code> to get a recognized "not filled in yet"/empty instance of a class -- I'm not sure if it is exactly the same as <code>new Foo()</code> or not.  Many library classes also implement a <code>Foo.Empty</code> property, which returns a similar instance.  And of course any reference type can point to <code>null</code>.  So really, what's the difference?  When is one right or wrong?  What's more consistent, or performs better?  What tests should I use when checking if an object is conceptually "not ready for prime time"?  Not everybody has <code>Foo.IsNullOrEmpty()</code>.</p>

```
default(Foo)
```
works for both value types and reference types.
```
New Foo(), null
```
and
```
Foo.Empty()
```
do not.  This makes it a good choice for use with generic types, for example, when you may not know which you're dealing with.  But in most reference-type cases,
```
null
```
is probably good enough.