Как я могу переопределить свойство, чтобы получить к нему статический доступ?C#

Место общения программистов C#
Ответить
Anonymous
 Как я могу переопределить свойство, чтобы получить к нему статический доступ?

Сообщение Anonymous »

Я разрабатываю приложение Winforms с базовой базой данных. В моей системе есть BusinessFunction, которая описывает бизнес-функции, которые может выполнять пользователь с данной ролью, а также связанные формы и таблицы базы данных для выполнения этой функции.
Роль пользователя имеет коллекцию BusinessFunction и набор разрешений для каждой из них (чтение, запись, удаление)
например. У меня есть бизнес-функция под названием «Управление арендой книг», которая связана с ролью «Библиотекарь», формой LibraryForm и таблицами «Книги», «Прокат» и «Клиенты». Роль Библиотекаря имеет доступ на чтение и запись для указанных таблиц.
Доступ к форме и базе данных обрабатывается в разных местах, но все они используют одни и те же значения BusinessFunction, что означает, что у меня есть много строковых литералов, которые напрямую сравниваются во многих разных местах. Когда я проверяю доступ пользователя к форме, мне нужно знать, с какой BusinessFunction связана эта форма, и в этом суть моего вопроса: есть ли способ, чтобы мои формы использовали это свойство, но которое позволило бы мне получить значение для конкретной формы без необходимости ее создания? например поэтому я могу вызвать CheckAccess(LibraryForm.BusinessFunction) без необходимости создания экземпляра LibraryForm и вызова CheckAccess() внутри.
Я рассматривал возможность создания списка констант где-нибудь, где все имеют к нему доступ, и мне, вероятно, все равно придется это сделать, но помимо присвоения им имен таким образом, чтобы они очень четко коррелировали с формой, это лишь поможет мне в некоторой степени
Чтобы внести ясность, я не спрашиваю, могу ли я и почему я не могу использовать статические абстрактные или статические виртуальные свойства (уже есть много вопросов по этому поводу), я спрашиваю, есть ли шаблон или альтернативный подход, который я могу использовать для получения результата, который мне нужен. К сожалению, это приложение .net Framework, поэтому я не могу использовать новые статические элементы виртуального интерфейса.
Несколько потенциальных подходов:
  • Класс констант с константной строкой LIBRARY_BUSINESS_FUNCTION = «Управление арендой книг» или константной строкой MANAGE_BOOK_RENTALS

    Достаточно легко реализовать, но немного громоздко и нетривиально в обслуживании
[*]

Код: Выделить всё

static Dictionary FormFunctions
  • Это позволит мне вызвать FormFunctions[nameof(LibraryForm)]
  • Я не могу разместить это где-нибудь с доступом к библиотеке, которая определяет мои формы, иначе у меня будет циклическая ссылка, поэтому ключи словаря будут строковыми литералами - очень сложно поддерживать и масштабировать
[*]Использование атрибутов 1, 2
  • Это приблизит меня к «статическому» доступу
  • Я мог бы использовать генератор исходного кода или плетение для перемещения проверок во время компиляции


Подробнее здесь: https://stackoverflow.com/questions/798 ... the-proper
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»