gpt4 book ai didi

c# - 在 Func 参数上指定代码契约(Contract)?

转载 作者:太空狗 更新时间:2023-10-29 23:34:49 26 4
gpt4 key购买 nike

假设我有以下内容

public T Example(Func<T> f)
{
Contract.Requires(f != null);
Contract.Requires(f() != null); // no surprise, this is an error
...
}

有什么方法可以指定我的 Func<T>参数必须遵守一些契约?

最佳答案

一般来说,这似乎是一个有问题的要求,因为调用 f 可能会引入副作用,因此指定契约可能会影响该方法的作用。

作为 Code Contracts 库的实现者,可以引入包装代码来检查 f 的值在您的方法上下文中被调用时是否遵守约定(以避免引入虚假的方法调用)。由于以下几个原因,这是有问题的:

  1. 该方法可能永远不会调用 f,因此调用者可能会违反契约(Contract)而不会被破坏。
  2. 该方法只能在执行一些其他工作后才能调用 f,如果对 f 的调用不满足规范,这些工作可能无效。

如果 f 没有副作用,那么这些都不是问题,但是在存在副作用的情况下,通过始终调用 f 来处理 1 是行不通的,并且在处理 2 之前调用 f 也不会成功。

因此,总而言之,我不认为这是可能的(在 native 代码契约的上下文中)并且没有充分的理由。

关于c# - 在 Func<T> 参数上指定代码契约(Contract)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060148/

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