ReliabilityContractAttribute是用来做什么的?

13

这个东西有实际作用吗,还是只用于文档记录。如果仅仅是为了文档记录,那么文档为什么不对它进行说明呢?

例如,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个回答

13

我认为它们也用于限制执行区域,这样CLR就知道它可以安全地做什么。在CER中,您的代码无法执行某些操作,而CLR则保证不会抛出某些异常。

MSDN有更多细节。


@PavelMayorov:链接到一个看起来合理的MSDN页面;我不知道MSDN 杂志页面是否仍然存在。 - Jon Skeet

3

来自MSDN

ReliabilityContractAttribute 属性提供了一种机制,让您可以记录代码并指示在可能导致不一致状态的异常情况下可以做出什么类型的可靠性保证。在这个上下文中,异常条件被定义为由公共语言运行时在运行时生成的异步异常,如中止的线程、内存不足和堆栈溢出。您可以将 ReliabilityContractAttribute 属性应用于程序集、类型和方法。

使用此属性与 Consistency 枚举一起,通过记录特定代码段中的可靠性级别来定义可靠性契约。


是的,我已经阅读了这个。那么,为什么忽略了这份文档呢? - Prankster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接