vorrei specificare un contratto per questa interfaccia generica, utilizzando contratti Codice:Contratti di codice: come posso fornire una classe di contratto per un'interfaccia generica?
interface IRandomWriteAccessible<T>
{
T this[uint index] { set; }
uint Length { get; }
}
La documentazione dice di usare l'attributo ContractClass
quando si specifica un contratto per un'interfaccia. Tuttavia, il compilatore si lamenterà di questo:
[ContractClass(typeof(IRandomWriteAccessibleContract<T>))]
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <-- compiler error
interface IRandomWriteAccessible<T> { … }
[ContractClassFor(typeof(IRandomWriteAccessible<T>))]
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <-- compiler error
sealed class IRandomWriteAccessibleContract<T> : IRandomWriteAccessible<T> { … }
Sembra che i parametri di tipo non possano essere utilizzati con gli attributi.
Come do Scrivo un contratto per la mia interfaccia generica? O questo non è possibile con i Contratti di Codice?
non ho verificato questo, ma rimuovere il ' T' dal tuo uso degli attributi come segue: '[ContractClass (typeof (IRandomWriteAccessibleContract <>))]' –
@ Steve Guidi: OMG, questa modifica rende il compilatore felice. Non ho ancora controllato se funziona effettivamente come previsto. Riferirò non appena ne saprò di più. Grazie mille. – stakx
@ Steve Guidi: il tuo suggerimento funziona. Se la ripeti come risposta, sarei felice di contrassegnarla come risposta accettata. Grazie per l'aiuto! – stakx