我知道 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
的使用是纯净的。