Это прекрасно определено; явные реализации интерфейса имеют приоритет при использовании интерфейса, а обычное свойство вступает в силу в противном случае (в том числе из тела get / set).
Что касается того, чтобы сделать его более аккуратным ... лучшее, что я могу предложить, - это переформатировать его, чтобы сделать его менее многословным ...
DateTime IHaveUpdateDateFields.CreatedOn
{
get { return CreatedOn; }
set { CreatedOn = value; }
}
(обратите внимание также, что this
является неявным и избыточным)
В качестве отступления - безопасность - это только удобство, а не гарантия ... внешние абоненты все еще могут использовать ваш интерфейс и обычно (ab) могут использовать отражение, чтобы прыгать через простые вещи, такие как protected
- или даже просто установить поля непосредственно.