C# PureAttribute对参数的作用

C# PureAttribute对参数的作用,c#,.net-4.0,code-contracts,C#,.net 4.0,Code Contracts,我理解,用于将某些东西(类、方法、委托等)标记为未进行可见更改,但我可以从以下定义看出,它可以应用于方法参数: [AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Constructor|AttributeTargets.Method|AttributeTargets.Property|AttributeTargets.Event|AttributeTargets.Parameter|AttributeTargets.

我理解,用于将某些东西(类、方法、委托等)标记为未进行可见更改,但我可以从以下定义看出,它可以应用于方法参数:

[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
不应在参数
上使用未标记为
[Pure]
的任何内容,这意味着我们可以确保
SomeClass
的实例在调用
SomeMethod
前后都明显相同


我没有见过以这种方式使用的
PureAttribute
,我想知道这是因为代码契约中缺乏支持还是因为我的误解?

正如您所说的
PureAttribute
表明类型或方法是纯的,也就是说,它不会做出任何可见的状态更改(直接摘自MSDN文章)

也许你的
SomeClass
没有被标记为纯类,因为它可以改变状态,但这并不意味着其中的一切都是不纯的


也许你的
SomeMethod
没有使用任何
SomeClass
不纯的方法,也许它只是读取它的属性(我假设你没有在属性getter中执行不纯的操作,否则你就是邪恶的),因此它对SomeClass的用法是纯的。…………………

类是引用类型,该方法可能会改变参数的字段或属性,并且这种变化在方法之外是可以观察到的。[pure]属性承诺该方法不执行此操作。C语言和C++语言中const关键字的替代。@汉斯潘,如果你可以把你的评论作为答案,我会很乐意接受它。这似乎是我所假设的,但是我找不到明确说明的地方,MSDN只提到了<代码> [纯]。
应用于方法和类型。当应用于参数时,您是否有一个链接到任何说明此目的的文档?@HansPassant如果是方法进行更改,则不应通过将
PureAttribute
应用于
SomeMethod
而不是参数来说明?@Albireo我认为Hans说,该方法保证不会对参数调用任何不纯的方法,但是
SomeMethod
本身可能会做出一些不纯的更改,即
参数将不会有任何更改,但其他事情可能会。应用[Pure]这个方法意味着其他东西,它保证它不会改变这个对象的可观察状态。我应该写它,但现在并没有足够的时间来正确地做它。也许以后吧。我不是那个投反对票的人。然而,正如我的问题所说,我确实理解
PureAttribute
的目的,并使用它t daily,我想要的是在应用于参数时对其用途的一些澄清。@Lukazoid是的,我最初误读了你的问题,并更新了我的答案。你是阅读了最初的版本还是更新的版本?