我知道 PureAttribute 用于将某些内容(类,方法,委托(delegate)等)标记为未进行任何可见的更改,但是从以下定义中可以看出,它可以应用于方法参数:

[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,并且想知道这是由于缺乏代码契约(Contract)支持还是由于对我的误解?

最佳答案

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

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

也许您的SomeMethod不使用任何SomeClass不纯方法,也许只是读取其属性(我假设您不是在属性 setter/getter 中执行不纯的 Action ,否则就很邪恶),因此SomeClass的使用是纯净的。

10-06 12:46