Нет, я думаю, что невозможно на уровне языка .Хотя вы можете контролировать доступ к свойству через get
и set
методы доступа, вы не можете контролировать доступ к полю.В конце концов, это основное различие между полями и свойствами, не так ли.
Я думаю, ObsoleteAttribute
получает специальную обработку в Visual Studio.VS знает, что он должен выдавать предупреждение всякий раз, когда сталкивается с созданием экземпляра типа, отмеченного этим атрибутом.Поэтому, я думаю, вы могли бы реализовать свой RestrictToPropertyAttribute
вместе с помощью какого-то расширения / плагина Visual Studio .
PS: Обратите внимание, что в ваших примерах кода, вам не нужно явное поле поддержки в первую очередь! Если ваши средства доступа к свойствам не содержат никакой дополнительной логики, вы также можете написать:
public int SomeProperty { get; set; }
и вспомогательное поле для SomeProperty
будет создано для вас автоматически (но оно скрыто, поэтому вы не можете получить к нему доступ любым другим способом, кроме как через свойство - т. Е. Именно то, что вы пытаетесь достичь).