关于参数的PureAttribute的目的

时间:2014-03-05 12:48:24

标签: c# .net-4.0 code-contracts

我理解PureAttribute用于标记某些内容(类,方法,委托等),因为没有可见的更改,但我可以从以下定义中看到它可以应用于方法参数:< / p>

[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Constructor|AttributeTargets.Method|AttributeTargets.Property|AttributeTargets.Event|AttributeTargets.Parameter|AttributeTargets.Delegate, AllowMultiple = false, Inherited = true)]
public sealed class PureAttribute : Attribute

此属性应用于参数的目的是什么,如下所示:

public void SomeMethod([Pure]SomeClass theParameter)
{
}

这是否意味着SomeMethod不应使用theParameter上未标记为[Pure]的任何内容,这意味着我们可以确保SomeClass的实例在以前看起来相同并在调用SomeMethod

之后

我没有看到以这种方式使用的PureAttribute,并且想知道这是因为代码合同中缺乏支持还是因为对我的误解?

1 个答案:

答案 0 :(得分:2)

如您所述,PureAttribute表示类型或方法是纯粹的,即它不会进行任何可见的状态更改(直接来自MSDN文章)。

也许您的SomeClass未标记为纯,因为可以更改状态,但这并不意味着其中的所有内容都是不纯的。

也许你的SomeMethod不使用任何SomeClass不纯的方法,也许它只是读取它的属性(我假设你没有在属性获取者中执行不纯的动作,否则你就是邪恶),所以SomeClass的使用是纯粹的。