gpt4 book ai didi

.net - 为什么我要在公共(public)方法中使用代码契约?

转载 作者:行者123 更新时间:2023-12-04 19:07:28 28 4
gpt4 key购买 nike

恕我直言,由于任何其他程序员都可以调用带有参数的公共(public)方法,因此它有责任验证参数值并抛出有意义的 ArgumentException , 如果其中任何一个无效。

话虽如此,我为什么更喜欢这个:

public void Toto(string parameter)
{
Contract.Requires(parameter != null);
//...
}

……过了这个?
public void Toto(string parameter)
{
if (parameter == null)
throw new ArgumentNullException(nameof(parameter));
//...
}

在第一种情况下,必须启用运行时契约检查才能引发异常。正如我们所知,对于发布版本,此选项可能未选中,这意味着不会发生参数验证。对于任何您可能认识或可能不认识的任何人都可以使用的公共(public)方法作为已发布产品的一部分,这似乎是个坏主意。

即使为发布版本启用运行时检查,将被抛出的异常也不会是典型的 .NET 开发人员所期望的(在这种情况下为 ArgumentNullException)。

那么我错过了什么?为什么我要使用代码契约而不是“传统的”if-throw 模式?

最佳答案

您将使用契约(Contract),因为它允许使用您的代码的人使用静态分析器来查找代码中的错误。此外,您可能希望确保您实现了 Contract.Ensures 方法,以便其他程序员知道您的函数保证返回什么。

您可能会为您的发布代码使用替代的 requires 格式。

public void Toto(string parameter)
{
Contract.Requires<ArgumentNullException>(parameter != null);
//...
}

因为如果参数为空,这个版本实际上会抛出异常。

关于.net - 为什么我要在公共(public)方法中使用代码契约?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20957692/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com