分析面向对象代码的想法

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.如果你被要求实施它,你会从哪里开始?

Mat*_*ott 8

代码合同基本上可以满足您的要求.(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)

代码合同中有很多深度,值得一读.