I've read an article "Code Contracts in .NET" by cilu recently, but I'dont understood all, so I'd ask few more question:

1. What is the difference between code contracts and assertions (e.g. Debug.Assert)?

2. Are they enforced by compiler in some way, or work only in run-time?

3. What is the main benefit?