Development Class C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace ObjectBakery.Utils
{
    /// 
    /// Design By Contract Checks.
    /// 
    /// Each method generates an exception or
    /// a trace assertion statement if the contract is broken.
    /// 

    /// 
    /// This example shows how to call the Require method.
    /// 
    /// public void Test(int x)
    /// {
    ///   try
    ///   {
    ///      Check.Require(x > 1, "x must be > 1");
    ///    }
    ///    catch (System.Exception ex)
    ///    {
    ///      Console.WriteLine(ex.ToString());
    ///    }
    ///  }
    /// 

    ///
    /// You can direct output to a Trace listener. For example, you could insert
    /// 
    /// Trace.Listeners.Clear();
    /// Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
    /// 

    /// 
    /// or direct output to a file or the Event Log.
    /// 
    /// (Note: For ASP.NET clients use the Listeners collection
    /// of the Debug, not the Trace, object and, for a Release build, only exception-handling
    /// is possible.)
    /// 

    /// 
    public sealed class Check
    {
        #region Interface
        /// 
        /// Precondition check - should run regardless of preprocessor directives.
        /// 

        public static void Require(bool assertion, string message)
        {
            if (UseExceptions)
            {
                if (!assertion) throw new PreconditionException(message);
            }
            else
            {
                Trace.Assert(assertion, "Precondition: " + message);
            }
        }
        /// 
        /// Precondition check - should run regardless of preprocessor directives.
        /// 

        public static void Require(bool assertion, string message, Exception inner)
        {
            if (UseExceptions)
            {
                if (!assertion) throw new PreconditionException(message, inner);
            }
            else
            {
                Trace.Assert(assertion, "Precondition: " + message);
            }
        }
        /// 
        /// Precondition check - should run regardless of preprocessor directives.
        /// 

        public static void Require(bool assertion)
        {
            if (UseExceptions)
            {
                if (!assertion) throw new PreconditionException("Precondition failed.");
            }
            else
            {
                Trace.Assert(assertion, "Precondition failed.");
            }
        }
        /// 
        /// Postcondition check.
        /// 

        public static void Ensure(bool assertion, string message)
        {
            if (UseExceptions)
            {
                if (!assertion) throw new PostconditionException(message);
            }
            else
            {
                Trace.Assert(assertion, "Postcondition: " + message);
            }
        }
        /// 
        /// Postcondition check.
        /// 

        public static void Ensure(bool assertion, string message, Exception inner)
        {
            if (UseExceptions)
            {
                if (!assertion) throw new PostconditionException(message, inner);
            }
            else
            {
                Trace.Assert(assertion, "Postcondition: " + message);
            }
        }
        /// 
        /// Postcondition check.
        /// 

        public static void Ensure(bool assertion)
        {
            if (UseExceptions)
            {
                if (!assertion) throw new PostconditionException("Postcondition failed.");
            }
            else
            {
                Trace.Assert(assertion, "Postcondition failed.");
            }
        }
        /// 
        /// Invariant check.
        /// 

        public static void Invariant(bool assertion, string message)
        {
            if (UseExceptions)
            {
                if (!assertion) throw new InvariantException(message);
            }
            else
            {
                Trace.Assert(assertion, "Invariant: " + message);
            }
        }
        /// 
        /// Invariant check.
        /// 

        public static void Invariant(bool assertion, string message, Exception inner)
        {
            if (UseExceptions)
            {
                if (!assertion) throw new InvariantException(message, inner);
            }
            else
            {
                Trace.Assert(assertion, "Invariant: " + message);
            }
        }
        /// 
        /// Invariant check.
        /// 

        public static void Invariant(bool assertion)
        {
            if (UseExceptions)
            {
                if (!assertion) throw new InvariantException("Invariant failed.");
            }
            else
            {
                Trace.Assert(assertion, "Invariant failed.");
            }
        }
        /// 
        /// Assertion check.
        /// 

        public static void Assert(bool assertion, string message)
        {
            if (UseExceptions)
            {
                if (!assertion) throw new AssertionException(message);
            }
            else
            {
                Trace.Assert(assertion, "Assertion: " + message);
            }
        }
        /// 
        /// Assertion check.
        /// 

        public static void Assert(bool assertion, string message, Exception inner)
        {
            if (UseExceptions)
            {
                if (!assertion) throw new AssertionException(message, inner);
            }
            else
            {
                Trace.Assert(assertion, "Assertion: " + message);
            }
        }
        /// 
        /// Assertion check.
        /// 

        public static void Assert(bool assertion)
        {
            if (UseExceptions)
            {
                if (!assertion) throw new AssertionException("Assertion failed.");
            }
            else
            {
                Trace.Assert(assertion, "Assertion failed.");
            }
        }
        /// 
        /// Set this if you wish to use Trace Assert statements 
        /// instead of exception handling. 
        /// (The Check class uses exception handling by default.)
        /// 

        public static bool UseAssertions
        {
            get
            {
                return useAssertions;
            }
            set
            {
                useAssertions = value;
            }
        }
        #endregion // Interface
        #region Implementation
        // No creation
        private Check() { }
        /// 
        /// Is exception handling being used?
        /// 

        private static bool UseExceptions
        {
            get
            {
                return !useAssertions;
            }
        }
        // Are trace assertion statements being used? 
        // Default is to use exception handling.
        private static bool useAssertions = false;
        #endregion // Implementation
    } // End Check
    #region Exceptions
    /// 
    /// Exception raised when a contract is broken.
    /// Catch this exception type if you wish to differentiate between 
    /// any DesignByContract exception and other runtime exceptions.
    ///  
    /// 

    public class DesignByContractException : ApplicationException
    {
        protected DesignByContractException() { }
        protected DesignByContractException(string message) : base(message) { }
        protected DesignByContractException(string message, Exception inner) : base(message, inner) { }
    }
    /// 
    /// Exception raised when a precondition fails.
    /// 

    public class PreconditionException : DesignByContractException
    {
        /// 
        /// Precondition Exception.
        /// 

        public PreconditionException() { }
        /// 
        /// Precondition Exception.
        /// 

        public PreconditionException(string message) : base(message) { }
        /// 
        /// Precondition Exception.
        /// 

        public PreconditionException(string message, Exception inner) : base(message, inner) { }
    }
    /// 
    /// Exception raised when a postcondition fails.
    /// 

    public class PostconditionException : DesignByContractException
    {
        /// 
        /// Postcondition Exception.
        /// 

        public PostconditionException() { }
        /// 
        /// Postcondition Exception.
        /// 

        public PostconditionException(string message) : base(message) { }
        /// 
        /// Postcondition Exception.
        /// 

        public PostconditionException(string message, Exception inner) : base(message, inner) { }
    }
    /// 
    /// Exception raised when an invariant fails.
    /// 

    public class InvariantException : DesignByContractException
    {
        /// 
        /// Invariant Exception.
        /// 

        public InvariantException() { }
        /// 
        /// Invariant Exception.
        /// 

        public InvariantException(string message) : base(message) { }
        /// 
        /// Invariant Exception.
        /// 

        public InvariantException(string message, Exception inner) : base(message, inner) { }
    }
    /// 
    /// Exception raised when an assertion fails.
    /// 

    public class AssertionException : DesignByContractException
    {
        /// 
        /// Assertion Exception.
        /// 

        public AssertionException() { }
        /// 
        /// Assertion Exception.
        /// 

        public AssertionException(string message) : base(message) { }
        /// 
        /// Assertion Exception.
        /// 

        public AssertionException(string message, Exception inner) : base(message, inner) { }
    }
    #endregion // Exception classes
}