use*_*813 2 c# oop code-analysis
如果我能做魔术,我会想出一个C#代码分析工具; 我们称之为XYZ.以下是您可以输入的一些代码示例XYZ:
public class MyClass
{
private int myInt;
[Functional]
public int GetDoubleOfMyInt()
{
return 2*myInt;
}
[SideEffect: myInt]
public void IncrementMyInt()
{
myInt++;
}
}
Run Code Online (Sandbox Code Playgroud)
注意两种方法的标签.XYZ将验证它GetDoubleOfMyInt()确实是纯功能的(在某种意义上它只是计算一个整数)并且IncrementMyInt具有赋值的副作用myInt.如果你换了两个标签XYZ会发出两个错误.
我的问题:1.XYZ确实存在重新安排的事情吗?2.如果你被要求实施它,你会从哪里开始?
代码合同基本上可以满足您的要求.(http://msdn.microsoft.com/en-us/devlabs/dd491992)
代码契约允许您使用允许编译器和IDE静态分析代码的属性和调用来装饰代码.您可以在System.Diagnostics.Contracts命名空间中找到代码约定,但要利用完整的静态类型检查,您至少需要Visual Studio的Premium版SKU(我认为).
一个简单的例子,您的Functional属性基本上与以下内容相同Pure:
[Pure]
public void GetMessage() { return _message; }
Run Code Online (Sandbox Code Playgroud)
这告诉分析仪该方法不会发生状态变化.您还可以对您的方法进行前置和后置条件,例如:
public void WriteMessage(string message)
{
Contract.Requires(message != null);
}
Run Code Online (Sandbox Code Playgroud)
代码合同中有很多深度,值得一读.