【问题标题】:Purpose of PureAttribute on parameterPureAttribute 在参数上的用途
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 我不是投反对票的人。但是,正如我的问题所述,我确实了解PureAttribute 的用途并且几乎每天都在使用它,我所追求的是在应用于参数时对其用途进行一些澄清。
  • @Lukazoid 是的,我最初误读了你的问题,我已经更新了我的答案。您阅读的是初始版本还是更新版本?
猜你喜欢
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 2019-01-15
  • 2013-02-20
  • 2012-11-05
  • 2012-01-12
  • 2015-04-04
  • 1970-01-01
相关资源
最近更新 更多