Сегодня я очищал часть своего кода с помощью FXCop, и он жаловался на класс Attribute, который у меня был с этим нарушением.
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;
}
}
}
Вместо частного поля я использовал общедоступное автообъект, мне пришлось добавить последнюю часть, чтобы остановить предупреждение, но я не вижу смысла, и он также добавляет другое открытое поле в этот класс, который является избыточным и кажется менее чистым.
Тем не менее, я предполагаю, что это предупреждение выдвинуто по какой-то причине, так что за веская причина, по которой я здесь скучаю?
Заранее спасибо.