Рассмотрим следующий атрибут.
internal class NiceAttribute : Attribute
{
private string _stuff;
public string Stuff
{
set { _stuff = value; }
}
}
Когда я пытаюсь использовать атрибут [Nice(Stuff = "test")]
, компилятор выдает следующую ошибку.
'Stuff' не является допустимым аргументом атрибута name. Именованный атрибут аргументы должны быть полями, которые не являются readonly, static или const, или read-write, которые являются общедоступными, а не статическими.
Какова рациональность требования к тому, чтобы свойство было удобочитаемым?
Обновление
Я попытаюсь набросать свой вариант использования для свойств записи только для атрибутов.
interface ISettingsBuilder
{
Settings GetSettings();
}
class SettingsAttribute : Attribute, ISettingsBuilder
{
private readonly IDictionary<string, object> _settings =
new Dictionary<string, object>();
public Settings GetSettings()
{
// Use _settings to create an immutable instance of Settings
}
public string Stuff
{
set { _settings["Stuff"] = value; }
}
// More properties ...
}
Могут быть другие реализации ISettingsBuilder
. Например, тот, который предлагает хороший API для создания настроек с помощью кода.
Я закончил с внедрением своих геттеров, выбросив NotImplementedException
.
public string Stuff
{
get { throw new NotImplementedException(); }
set { _settings["Stuff"] = value; }
}
Можете ли вы придумать более удобный способ сделать что-то подобное?