【发布时间】:2014-03-05 12:48:23
【问题描述】:
我知道PureAttribute 用于将某些东西(类、方法、委托等)标记为没有可见的更改,但我可以从以下定义中看到它可以应用于方法参数:
[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是这样使用的,想知道这是因为代码合约缺乏支持还是我的理解有误?
【问题讨论】:
-
类是引用类型,该方法可以更改 theParameter 的字段或属性,并且该更改在方法之外是可观察的。 [Pure] 属性承诺该方法不会这样做。替代 C 和 C++ 语言中的 const 关键字。
-
@HansPassant 如果您可以将您的评论作为答案,我将很乐意接受。这似乎是我的假设,但是我找不到明确说明这一点的地方,MSDN 只提到
[Pure]被应用于方法和类型。您是否有任何文档的链接在应用于参数时阐明了此目的? -
@HansPassant 如果是进行更改的方法,不应该通过将
PureAttribute应用于SomeMethod而不是参数来说明? -
@Albireo 我认为 Hans 是在说该方法保证不会在
theParameter上调用任何不纯的方法,但是SomeMethod本身可能会进行一些不纯的更改,即theParameter不会有任何更改但其他事情可能。 -
在方法上应用 [Pure] 意味着别的东西,它承诺它不会改变 this 对象的可观察状态。我应该把它写下来,但现在没有足够的时间来正确地完成它。也许以后。
标签: c# .net-4.0 code-contracts