ReliabilityContractAttribute有什么作用?

时间:2009-04-14 16:11:13

标签: c# .net vb.net attributes

它是否可以执行任何操作,或仅用于文档。如果它仅用于文档,为什么文档没有记录它?

例如,这两个System.Array的静态方法:

[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static void Copy(Array sourceArray, Array destinationArray, int length)

[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static void ConstrainedCopy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length)

他们生成的MSDN文档甚至没有提到注释CopyConstrainedCopy

2 个答案:

答案 0 :(得分:10)

我相信它们也被用于约束执行区域,因此CLR知道它可以安全地做什么。您的代码在CER中无法做某些事情,作为回报,CLR保证不会抛出某些带外异常。

MSDN有更多细节。

答案 1 :(得分:3)

来自MSDN

  

ReliabilityContractAttribute   属性为您提供了一种机制   记录您的代码,并表明   什么类型的可靠性保证   你可以面对   可能的特殊情况   可能导致不一致   州。在这方面,特殊   条件定义为异步   可以生成的异常   用共同语言运行时间   运行时,例如中止的线程,   内存不足的情况和堆栈   溢出。你可以申请   ReliabilityContractAttribute属性   装配,类型和方法。

     

将此属性与。一起使用   用于定义a的一致性枚举   通过记录可靠性合同   一个人的可靠性水平   特别的代码。