나는 코드 계약을 사용하여,이 일반적인 인터페이스에 대한 계약을 지정하고 싶습니다 :코드 계약 : 제네릭 인터페이스에 대한 계약 클래스를 어떻게 제공합니까?
는interface IRandomWriteAccessible<T>
{
T this[uint index] { set; }
uint Length { get; }
}
문서는 인터페이스에 대한 계약을 지정할 때 ContractClass
속성을 사용했다. 그러나 컴파일러는 이것에 대해 불평 할 것입니다.
[ContractClass(typeof(IRandomWriteAccessibleContract<T>))]
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <-- compiler error
interface IRandomWriteAccessible<T> { … }
[ContractClassFor(typeof(IRandomWriteAccessible<T>))]
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <-- compiler error
sealed class IRandomWriteAccessibleContract<T> : IRandomWriteAccessible<T> { … }
유형 매개 변수는 속성과 함께 사용할 수없는 것으로 보입니다.
How do 나는 제네릭 인터페이스 계약을 맺고 있습니까? 아니면 코드 계약에서 불가능합니까?
나는 이것을 확인하지 않은,하지만 제거' T '를 다음과 같이 사용합니다 :'[ContractClass (typeof (IRandomWriteAccessibleContract <>))] –
@ Steve Guidi : OMG,이 변화는 실제로 컴파일러를 행복하게 만듭니다. 예상대로 실제로 작동하는지 아직 확인하지 않았습니다. 내가 더 많이 알 자마자 곧 돌아올거야. 지금까지 고마워. – stakx
@ Steve Guidi : 귀하의 제안이 효과적입니다. 답변으로 다시 게시하는 경우 허용 된 답변으로 기꺼이 표시해 드리겠습니다. 도와 줘서 고마워! – stakx