2011-06-15 10 views
8

estoy acaba de empezar con los contratos de código, y necesito un poco de ayuda en la corrección de un error:comprensión Código Contrato de error

Teniendo en cuenta este código:

class MyClass 
{ 
    private bool _isUsed = false; 

    public void SomeMethod() 
    { 
     Contract.Requires(!_isUsed); 
    } 
} 

me sale el siguiente error:

error CC1038: Member 'MyClass._isUsed' has less visibility than the enclosing method 'MyClass.SomeMethod' 

que parece hacer que muchas de las comprobaciones estándar no estén disponibles. ¿Qué me estoy perdiendo en este ejemplo?

+3

Consulte http://social.msdn.microsoft.com/Forums/en-IE/codecontracts/thread/b89bd560-340a-4ab3-8ec9-c80e3120bf1f – SLaks

Respuesta

5

Tiene un método público SomeMethod. Sin embargo, está requiriendo que una variable de miembro privado se establezca en falso. No proporciona ninguna forma de configurar _isUsed, por lo que está controlando una variable sobre la que la persona que llama no tiene control.

Se podría hacer _isUsed en una propiedad es decir

public bool IsUsed {get; set;} 

Y luego, en su SomeMethod() tienen

Contract.Requires(!IsUsed); 
8

Ya se ha explicado que, o bien _isUsed tiene problemas de visibilidad (el que llama no tiene control) que se aplica correctamente por require.

Sin embargo, dependiendo de lo que intente lograr con el Contrato, Contract.Assert puede satisfacer sus necesidades.

sería válido mientras que el Requiere no.