В некоторых случаях у меня есть свойство, которое требует "вспомогательного свойства" по практическим соображениям.
Например, у меня есть один тип со свойством Name - не происходит преобразования значения, происходящего при доступе, он просто инициирует какое-то действие; побочный эффект, если хотите. (не то, что это имеет значение для обсуждения, но в данном конкретном случае имя копируется в другое место при изменении.)
Допустим,
public class Person
{
private string __name;
protected internal virtual string _name
{
get
{
return this.__name;
}
set
{
this.__name = value;
}
}
public virtual string Name
{
get
{
return _name;
}
set
{
_name = value;
// action when changing the name takes place here...
}
}
}
Таким образом, свойство "_name" сопоставляется с базой данных, но сохраняется внутренним, чтобы его нельзя было изменить напрямую. А второе публичное свойство «Имя» обеспечивает фактический доступ.
Причина, по которой я настроил его таким образом, заключается в том, что если бы это действие было встроено непосредственно в метод set сопоставленного свойства "_name", оно было бы запущено, когда объект гидратируется из базы данных, а это не то, что я хотят.
Это все отлично работает как таковое.
Проблема в том, что при запросе этого типа попытка запроса Person.Name не будет работать, поскольку это свойство не сопоставлено!
Что мне не нравится в этом, так это то, что вы пишете код для Person.Name, но должны писать запросы к Person._name, что подвержено ошибкам и сбивает с толку.
Есть ли лучший способ решить эту проблему?