CA1019:定义访问器的属性参数。 我不明白其中的道理

今天,我在清理我的一些与FxCop的代码,它抱怨一个属性类我有此类违规行为。

CA1019: Define accessor for attribute argument.

在这个页面上,http://msdn.microsoft.com/en-us/library/ms182136.aspx有更多的信息,但我还是因为在我看来,更详细的和不太相关的不明白这样做的原因。

它提供了两个代码样本。

using System; namespace DesignLibrary { // Violates rule: DefineAccessorsForAttributeArguments. [AttributeUsage(AttributeTargets.All)] public sealed class BadCustomAttribute :Attribute { string data; // Missing the property that corresponds to // the someStringData parameter. public BadCustomAttribute(string someStringData) { data = someStringData; } } // Satisfies rule: Attributes should have accessors for all arguments. [AttributeUsage(AttributeTargets.All)] public sealed class GoodCustomAttribute :Attribute { string data; public GoodCustomAttribute(string someStringData) { data = someStringData; } //The constructor parameter and property //name are the same except for case. public string SomeStringData { get { return data; } } } }

我不明白为什么需要SomeStringData财产。 是不是someStringData参数? 为什么它需要有自己的财产,如果它已经存储在另一个属性?

其实,我的是一个有点不同,因为它看起来是这样的。

[AttributeUsage(AttributeTargets.Property)] public sealed class ExampleAttribute : Attribute { public ExampleAttribute(string attributeValue) { this.Path = attributeValue; } public string Name { get; set; } // Add to add this to stop the CA1019 moaning but I find it useless and stupid? public string AttributeValue { get { return this.Name; } } }

而不是私人领域,我已经使用了一个公共autoproperty,我不得不添加的最后一部分,以警告停止,但我不明白这一点,同时也增加了另一个公共领域的这一类,这是多余的,而且似乎不干净的。

也就是说,我认为这将引发此警告的一个原因有啥好的原因,我在这里丢失?

提前致谢。

--------------解决方案-------------

FxCop的抱怨,因为现有的属性不匹配的参数名称。
因此,它并没有意识到参数实际上露出。

你应该重新命名属性或参数匹配(除的情况下),或抑制警告。

在FxCop的警告背后的原因是,每一块数据传递到属性的构造应公开提供给访问时,该属性的实例是由反射检索。

比方说,你有这样的:

[BadCustom("My String Data")]
public class DecoratedClass
{
}

您将如何获得"My String Data"从当你使用阅读的属性实例回:

BadCustomAttribute attr = typeof(DecoratedClass)
.GetCustomAttributes(typeof(BadCustomAttribute), false)
.Single() as BadCustomAttribute;

现在,你有你的属性的实例 ,但没办法读传递到构造字符串 ,因为你没有至少声明一个只读属性吧。

的FxCop规则CA1019只是强制要求属性.Net框架编码准则。

使用命名参数(读/写性能)可选参数。 提供具有相同名称的每一个命名参数的读/写性能,但改变它们之间进行区分的情况。

文档链接:http://msdn.microsoft.com/en-us/library/2ab31zeh(v=vs.71).aspx

这个想法是,你应该这样写:

[AttributeUsage(AttributeTargets.Property)]
public sealed class ExampleAttribute : Attribute
{
public ExampleAttribute(string attributeValue)
{
this.AttributeValue = attributeValue;
}

public string AttributeValue
{
get;
set;
}
}

当参数名称匹配的属性名称,但数据类型是不同的这一违规也将被抛出。

分类:C# 时间:2015-03-14 人气:0
本文关键词: .NET,C#,属性
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.054 (s). 10 q(s)