首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种面向对象代码分析的思想

一种面向对象代码分析的思想
EN

Stack Overflow用户
提问于 2011-09-06 00:49:14
回答 1查看 150关注 0票数 2

如果我能变魔术,我会变出一个C#代码分析工具;让我们称它为XYZ。下面是一些可以作为XYZ输入的代码示例

代码语言:javascript
复制
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.如果你被要求实现它,你会从哪里开始?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-06 00:50:55

代码契约本质上是做你所要求的事情。(http://msdn.microsoft.com/en-us/devlabs/dd491992)

代码契约允许您使用允许编译器和IDE静态分析代码的属性和调用来修饰您的代码。您可以在System.Diagnostics.Contracts名称空间中找到代码契约,但要利用完整的静态类型检查,您至少需要Visual Studio的高级版SKU (我认为)。

举个简单的例子,您的Functional属性本质上与Pure相同

代码语言:javascript
复制
[Pure]
public void GetMessage() { return _message; }

它告诉分析器该方法不做任何状态改变。您还可以对您的方法执行前置条件和后置条件,例如:

代码语言:javascript
复制
public void WriteMessage(string message)
{
    Contract.Requires(message != null);
}

“代码契约”有很多深度,值得一读。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7310821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档