Defining Contracts on Interface C# with Example
[ContractClass(typeof(ValidationContract))] interface IValidation { string CustomerID{get;set;} string Password{get;set;} } [ContractClassFor(typeof(IValidation))] sealed class ValidationContract:IValidation { string IValidation.CustomerID { [Pure] get { return Contract.Result(); } set { Contract.Requires(!string.IsNullOrEmpty(value), "Customer ID cannot be null!!"); } } string IValidation.Password { [Pure] get { return Contract.Result(); } set { Contract.Requires(!string.IsNullOrEmpty(value), "Password cannot be null!!"); } } } class Validation:IValidation { public string GetCustomerPassword(string customerID) { Contract.Requires(!string.IsNullOrEmpty(customerID),"Customer ID cannot be Null"); Contract.Requires(!string.IsNullOrEmpty(customerID), "Exception!!"); Contract.Ensures(Contract.Result() != null); string password="AAA@1234"; if (customerID!=null) { return password; } else { return null; } } private string m_custID, m_PWD; public string CustomerID { get { return m_custID; } set { m_custID = value; } } public string Password { get { return m_PWD; } set { m_PWD = value; } } } In the above code, we have defined an interface called IValidation with an attribute [ContractClass]. This attribute takes an address of a class where we have implemented a contract for an Interface. The class ValidationContract makes use of properties defined in the interface and checks for the null values using Contract.Requires. T is an exception class. We have also marked the get accessor with an attribute [Pure]. The pure attribute ensures that the method or a property does not change the instance state of a class in which IValidation interface is implemented.