如果我能变魔术,我会变出一个C#代码分析工具;让我们称它为XYZ。下面是一些可以作为XYZ输入的代码示例
public class MyClass
{
private int myInt;
[Functional]
public int GetDoubleOfMyInt()
{
return 2*myInt;
}
[SideEffect: myInt]
public void IncrementMyInt()
{
myInt++;
}
} 请注意这两个方法上的标记。XYZ将验证GetDoubleOfMyInt()确实是纯函数的(从某种意义上说,它只计算一个整数),并且IncrementMyInt具有为myInt赋值的副作用。如果交换了这两个标签,XYZ将会发出两个错误。
我的问题是: 1.重采样的XYZ真的存在吗? 2.如果你被要求实现它,你会从哪里开始?
发布于 2011-09-06 00:50:55
代码契约本质上是做你所要求的事情。(http://msdn.microsoft.com/en-us/devlabs/dd491992)
代码契约允许您使用允许编译器和IDE静态分析代码的属性和调用来修饰您的代码。您可以在System.Diagnostics.Contracts名称空间中找到代码契约,但要利用完整的静态类型检查,您至少需要Visual Studio的高级版SKU (我认为)。
举个简单的例子,您的Functional属性本质上与Pure相同
[Pure]
public void GetMessage() { return _message; }它告诉分析器该方法不做任何状态改变。您还可以对您的方法执行前置条件和后置条件,例如:
public void WriteMessage(string message)
{
Contract.Requires(message != null);
}“代码契约”有很多深度,值得一读。
https://stackoverflow.com/questions/7310821
复制相似问题