Los contratos de código funcionan muy bien hasta que tenga que agregar un bazillion Contract.Assume(...)
para los resultados que salen del código de la estructura. Por ejemplo, MemoryStream.ToArray()
nunca devuelve una matriz nula, lo mejor que puedo ver al mirarlo en Reflector, pero no está documentado como un contrato, por lo que tengo que Assume
en todas partes.¿Cómo puedo especificar contratos de código para el código de marco existente (BCL)?
¿Existe alguna forma mágica de crear una biblioteca de contratos para las funciones que ya existen? Supongo que una vez que haya contratado unas pocas docenas de las funciones de marco más utilizadas, las advertencias serán mucho más aceptables.
"nunca devuelve una matriz nula" * hoy, * de todos modos. Una de las cosas sobre un contrato es que no debes cambiarlo. La ausencia de dicho contrato * podría * sugerir que * podría * cambiar. Tal vez. –
un punto justo, pero en el caso de los contratos de código, sospecho que es porque el equipo de contratos simplemente no ha tenido tiempo de agregar contratos en todas partes. Consulte http://social.msdn.microsoft.com/Forums/en-NZ/codecontracts/thread/d8e2c2ad-de37-42ef-a854-02052d821975, donde uno de los miembros del equipo señala "Estamos trabajando en llenar los vacíos tan rápido como sea posible, pero es principalmente impulsado por nosotros o se encuentra donde hay lagunas importantes. Lo ideal sería ir sistemáticamente a través de las bibliotecas y anotarlas. En este momento no tenemos el poder humano ". –