P.B*_*key 7 .net c# java computer-science invariants
在编写工作的书中,作者问"如何在代码中使用不变量".请解释这个问题的含义.
我在wiki上看到了类不变量,但是这个例子是用Java编写的,我在Java中并不熟练,不能将这个例子与C#联系起来..NET 4.0引入了不变性,协方差和逆变,这里有很好的解释.不变性如此广泛.作者使用这个词似乎与单元测试相关.对于读过这本书的人来说,作者的意思是什么?我们是在谈论做出假设而只是在单元测试后测试有效性吗?
Cod*_*aos 10
单词不变量并不意味着在某些条件下不会发生变化.有许多不同种类的不变量.例如,在物理学中,光速在lorentz变换下是不变的,即如果更改为参考帧,它不会改变.在编程中也有很多种不变量.有一些类不变量在对象的生命周期内不会改变,方法不变量在函数的生命周期内不会改变,...
类不变量在该类的实例中总是(至少在公开可观察的时间)是真的.
这与共同/反向差异无关.Co-/Contra-variance描述哪些类型可以替换具有不同(通用)参数或返回类型的其他类型.虽然你可以调用一些不变的东西,因为它不支持Co-/Contra-variance,但这是一种与类或方法不变量完全不同的不变性.
例如,某种类型的集合可能具有以下不变量:
有了这个课程:
class MyCollection<T>
{
private T[] data;
private int size;
public MyCollection()
{
data=new T[4];
}
public int Size{get{return size;}}
public int Capacity{get{return data.Length;}}
[ContractInvariantMethod]
protected void ClassInvariant()
{
Contract.Invariant(data != null);
Contract.Invariant(Size >= 0);
Contract.Invariant(Capacity >= 0);
Contract.Invariant(Size < Capacity);
}
}
Run Code Online (Sandbox Code Playgroud)
几乎每个班级都有一些不变量,但不是每个人都强制执行..net 4添加了一种使用代码契约来记录和断言它们的好方法.
归档时间: |
|
查看次数: |
3144 次 |
最近记录: |