Buscar..


Observaciones

Los contratos de código permiten la compilación o el análisis en tiempo de ejecución de las condiciones pre / post de los métodos y las condiciones invariables para los objetos. Estas condiciones se pueden usar para garantizar que las personas que llaman y el valor de retorno coincidan con los estados válidos para el procesamiento de la aplicación. Otros usos de los contratos de código incluyen la generación de documentación.

Precondiciones

Las condiciones previas permiten que los métodos proporcionen valores mínimos requeridos para los parámetros de entrada

Ejemplo...

void DoWork(string input)
{
    Contract.Requires(!string.IsNullOrEmpty(input));

    //do work
}

Resultado del análisis estático ...

introduzca la descripción de la imagen aquí

Postcondiciones

Las condiciones posteriores aseguran que los resultados devueltos de un método coincidirán con la definición proporcionada. Esto proporciona a la persona que llama una definición del resultado esperado. Las condiciones posteriores pueden permitir implementaciones simplificadas, ya que el analizador estático puede proporcionar algunos resultados posibles.

Ejemplo...

string GetValue()
{
    Contract.Ensures(Contract.Result<string>() != null);

    return null;
}

Analisis Estático Resultado ...

introduzca la descripción de la imagen aquí

Contratos para interfaces

Usando Contratos de Código es posible aplicar un contrato a una interfaz. Esto se hace declarando una clase abstracta que implementa las interfaces. La interfaz debe estar etiquetada con el ContractClassAttribute y la definición del contrato (la clase abstracta) debe estar etiquetada con el ContractClassForAttribute

C # Ejemplo ...

[ContractClass(typeof(MyInterfaceContract))]
public interface IMyInterface
{
    string DoWork(string input);
}
//Never inherit from this contract defintion class
[ContractClassFor(typeof(IMyInterface))]
internal abstract class MyInterfaceContract : IMyInterface
{
    private MyInterfaceContract() { }

    public string DoWork(string input)
    {
        Contract.Requires(!string.IsNullOrEmpty(input));
        Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>()));
        throw new NotSupportedException();
    }
}
public class MyInterfaceImplmentation : IMyInterface
{
    public string DoWork(string input)
    {
        return input;
    }
}

Resultado del análisis estático ...

introduzca la descripción de la imagen aquí

Instalación y habilitación de contratos de código

Mientras que System.Diagnostics.Contracts está incluido dentro de .Net Framework. Para utilizar los contratos de código, debe instalar las extensiones de Visual Studio.

En Extensions and Updates busque Code Contracts luego instale las Code Contracts Tools

Code Contract Tools instalar

Después de instalar las herramientas, debe habilitar los Code Contracts dentro de su solución de Proyecto. Como mínimo, es probable que desee habilitar la Static Checking (comprobación después de la compilación). Si está implementando una biblioteca que será utilizada por otras soluciones, puede considerar también habilitar la Runtime Checking .

Ajustes del proyecto



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow