gpt4 book ai didi

c# - 自动实现属性的代码契约(Contract)

转载 作者:可可西里 更新时间:2023-11-01 08:07:12 25 4
gpt4 key购买 nike

有什么方法可以在 .NET 中将契约放在自动实现的属性上吗?(如果答案是"is"怎么办)?

(我假设使用来自 DevLabs 的 .NET 代码契约(Contract))

最佳答案

是的,这是可能的 - 所需要的只是将您的契约(Contract)条件添加到类中的 [ContractInvariantMethod] 方法中,然后添加等效的 Requires 前提条件到自动 setter,并将后置条件 Ensures 添加到 get。来自 Reference 的第 2.3.1 节

As the example illustrates, invariants on auto-properties turn into:

  1. A precondition for the setter
  2. A postcondition for the getter
  3. An invariant for the underlying backing field

举例来说:

public int MyProperty { get; private set ;}

[ContractInvariantMethod]
private void ObjectInvariant ()
{
Contract.Invariant ( this.MyProperty >= 0 );
}

“相当于下面的代码:”

private int backingFieldForMyProperty;
public int MyProperty
{
get
{
Contract.Ensures(Contract.Result<int>() >= 0);
return this.backingFieldForMyProperty;
}

private set
{
Contract.Requires(value >= 0);
this.backingFieldForMyProperty = value;
}
}

[ContractInvariantMethod]
private void ObjectInvariant ()
{
Contract.Invariant ( this.backingFieldForMyProperty >= 0 );
...

关于c# - 自动实现属性的代码契约(Contract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5513942/

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