me gustaría especificar un contrato para este interfaz genérica, utilizando Code Contracts:Contratos de código: ¿Cómo proporciono una clase contractual para una interfaz genérica?
interface IRandomWriteAccessible<T>
{
T this[uint index] { set; }
uint Length { get; }
}
La documentación dice que use el atributo ContractClass
cuando se especifica un contrato para una interfaz. Sin embargo, el compilador se quejará de esto:
[ContractClass(typeof(IRandomWriteAccessibleContract<T>))]
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <-- compiler error
interface IRandomWriteAccessible<T> { … }
[ContractClassFor(typeof(IRandomWriteAccessible<T>))]
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <-- compiler error
sealed class IRandomWriteAccessibleContract<T> : IRandomWriteAccessible<T> { … }
Parece que los parámetros de tipo no se pueden usar con atributos.
Cómo do Escribo un contrato para mi interfaz genérica? ¿O esto no es posible con los Contratos de Código?
no he verificado esto, pero quitar el ' T' de su uso de atributos de la siguiente manera: '[ContractClass (typeof (IRandomWriteAccessibleContract <>))] ' –
@ Steve Guidi: OMG, este cambio realmente hace feliz al compilador. Todavía no he comprobado si realmente funciona como se esperaba. Te informaré tan pronto como sepa más. Gracias hasta ahora. – stakx
@ Steve Guidi: Tu sugerencia funciona. Si vuelve a publicarlo como respuesta, me complacería marcarlo como la respuesta aceptada. ¡Gracias por tu ayuda! – stakx