Должен ли я устанавливать каждый объект WinForm, такой как текстовое поле или кнопка, общедоступным? Каковы риски?

#c# #winforms

#c# #winforms

Вопрос:

Я заметил высокий спрос в моих проектах на такие объекты, как текстовые поля или общедоступные кнопки.

Есть ли какие-либо проблемы с установкой их общедоступными?

Что на самом деле означает public, private, static?

Ответ №1:

Модификаторы доступа (руководство по программированию на C #)

общедоступный

К типу или элементу может быть доступен любой другой код в той же сборке или другой сборке, которая ссылается на него.

Частное

К типу или члену можно получить доступ только с помощью кода в том же классе или структуре.

защищено

К типу или члену можно получить доступ только с помощью кода в том же классе или структуре или в классе, который является производным от этого класса.

внутренний

К типу или элементу может быть доступен любой код в той же сборке, но не из другой сборки.

защищенный внутренний

Доступ к типу или члену может быть получен любым кодом в сборке, в которой он объявлен, или из производного класса в другой сборке. Доступ из другой сборки должен осуществляться в объявлении класса, которое является производным от класса, в котором объявлен защищенный внутренний элемент, и это должно происходить через экземпляр типа производного класса.

Насколько я знаю, угрозы безопасности нет. Но может быть лучший альтернативный подход к разработке вашей программы

Комментарии:

1. Есть ли какие-либо риски для безопасности? Включение кнопок кажется невинным. Но так ли это?

2. Это говорит о том, что есть модификаторы доступа, но не дает никаких советов , которые, казалось, действительно могли бы задать вопрос.

3. Насколько я знаю, угрозы безопасности нет.

Ответ №2:

public , private и т.д. Называются модификаторами доступа и определяют правила, по которым другому коду разрешен доступ к каждому члену.

Технической проблемы с настройкой элементов управления как общедоступных нет. Но я бы не рекомендовал это. Наличие всего общедоступного — хороший рецепт для создания кода-спагетти.

Сохраните весь доступ к элементам управления в вашей форме и предоставьте только небольшой набор общедоступных методов с простым интерфейсом для доступа внешних участников к данным и операциям в форме.

Ответ №3:

Вы не должны, для чистого дизайна.

На самом деле вы должны поместить логику вашего приложения вне форм! Однако, если вы хотите сохранить логику внутри форм, вы должны, по крайней мере, предоставить им общедоступные свойства и методы, не предоставляя прямого доступа к элементам управления формой.

Например, вы можете предоставить такие вещи, как метод «EnableSave» или «QuitApplication» или «updateState».

Ответ №4:

Публичные, частные и статические имеют дело с областью видимости и что может говорить с объектами / методами

Public -> Другие классы могут создать экземпляр вашего класса (при условии, что класс является public ) и вызвать этот объект / метод напрямую

Private -> Другие классы могут создать экземпляр вашего класса (при условии, что класс является public ), но НЕ могут получить доступ к этому объекту / методу

Static -> Другие классы могут напрямую обращаться к этому объекту / методу (при условии, что класс public и метод public static ), например: YourClassName.ObjectOrMethod без необходимости создавать экземпляр YourClassName

Ответ №5:

Лучший модификатор доступа для компонента gui, когда вы хотите получить к нему прямой доступ:internal (это значение по умолчанию в VB.NET например).

Однако вы не должны указывать общедоступный или внутренний модификатор для элемента управления GUI, и вы не должны обращаться к нему напрямую, потому что уровень представления и уровень бизнес-логики должны быть разделены в хорошо спроектированной архитектуре…

Комментарии:

1. Хорошо, тогда. У меня есть основная форма, в основной форме есть кнопка сохранить и добавить запись. Добавить форму ввода добавляет данные в текстовое поле mainforms. затем сохранение должно быть заблокировано до тех пор, пока не появится запись в текстовом поле основных форм. таким образом, форма addentry должна иметь привилегию доступа к кнопке сохранения mainform, чтобы сделать ее доступной. Требуется ли, чтобы кнопка сохранения основной формы была общедоступной?

2. Я не понимаю вашу реализацию… Однако, если вам нужно получить прямой доступ к элементу управления другой формы, лучше использовать внутренний модификатор, а не общедоступный…