Defining Contracts on Interface C# with Example



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. 

0 Comment's

Comment Form

Submit Comment