none
C# Static Class RRS feed

  • Вопрос

  • Добрый день.

    Где то читал, что static это плохо.

    Что он (класс или переменная) висят в памяти как static и не освобождают память, к ним есть для взлома доступ и т.п. Короче было написано, что это очень плохо.

    А VS сама при автоматическом создании классов ctrl+. сама "шлёпает" статические классы и переменные.

    Вопрос 1)

    Если мне не нужны 42 экземпляра, и никогда не понадобятся можно смело использовать статические классы и переменные?

    Аналогично с Public

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

    VS вовсю создаёт Public поля и классы. Сама. Тот же класс на основе базы. Те же поля для коллекций. Вообще очень мало получается мест где private звучит.

    вроде internal похоже на public. Дак этой штуки вообще днём с огнём не встретишь в коде.

    Вопрос 2) Использовать public или нет? Или шифровать? Public метод, а в нём уже работать с private переменными. Или вообще на это не смотреть? Не та ситуация с моим приложением. Все эти безопасности для крупных проектов.


    • Изменено DevingAs 5 апреля 2016 г. 4:25
    5 апреля 2016 г. 4:24

Ответы

  • Как public так и static это не плохо и не хорошо. Плохо когда то или иное используют не к месту. 

    У вас, видимо, очень маленькое приложение, наверное все в одной сборке. Иначе я думаю вопрос про public бы просто не стоял. Что до private то использовать всегда если не нужен public. Internal часто используется для связки в пределах сборки и, иногда, для доступа из вне, например из тестов.

    Что до static то часто используется для методов расширения и для коллекции различных утилит.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа DevingAs 5 апреля 2016 г. 7:31
    5 апреля 2016 г. 6:17
    Модератор
  • Если и Static и Public плохо, то что хорошо?

    Вообще на вопросы "я где то читал" трудно отвечать. Мало ли кто, что и где написал и разбирался ли он вообще в вопросе.

    На самом деле взломать можно все, но использование модификаторов доступа или статических членов никак не упростит и не усложнит эту задачу.

    Зачем же они тогда нужны? Ну вот пример - есть у нас классы .Net Framework. Берем например класс по работе с фалами, а в нем метод для получения списка всех файлов в папке. Мы передаем методу имя папки, а получаем список файлов. Что этот метод в рамках этого класса делает внутри? Ну что то делает и понятно дело это не простое и для него внутри класса может быть масс переменных и других методов, выполняющих промежуточные задание. Вот теперь представьте, что все бы они были бы Public и мы могли бы из своего кода изменить любую внутреннюю переменную или вызвать промежуточный метод. В результате таких действий мы сломаем работу данного экземпляра класса, так как разработчики не задумывали, что бы в нем ковырялись.

    Вот и все для чего нужны модификаторы доступа. Для того что бы внутреннюю логику нельзя было случайно сломать из-вне. И именно случайно, так как намеренно ломать свой код использующий чужие dll не имеет смысла.


    VB.Net - WPF, UWP

    • Помечено в качестве ответа DevingAs 5 апреля 2016 г. 7:31
    5 апреля 2016 г. 6:30
    Отвечающий

Все ответы

  • Как public так и static это не плохо и не хорошо. Плохо когда то или иное используют не к месту. 

    У вас, видимо, очень маленькое приложение, наверное все в одной сборке. Иначе я думаю вопрос про public бы просто не стоял. Что до private то использовать всегда если не нужен public. Internal часто используется для связки в пределах сборки и, иногда, для доступа из вне, например из тестов.

    Что до static то часто используется для методов расширения и для коллекции различных утилит.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа DevingAs 5 апреля 2016 г. 7:31
    5 апреля 2016 г. 6:17
    Модератор
  • Если и Static и Public плохо, то что хорошо?

    Вообще на вопросы "я где то читал" трудно отвечать. Мало ли кто, что и где написал и разбирался ли он вообще в вопросе.

    На самом деле взломать можно все, но использование модификаторов доступа или статических членов никак не упростит и не усложнит эту задачу.

    Зачем же они тогда нужны? Ну вот пример - есть у нас классы .Net Framework. Берем например класс по работе с фалами, а в нем метод для получения списка всех файлов в папке. Мы передаем методу имя папки, а получаем список файлов. Что этот метод в рамках этого класса делает внутри? Ну что то делает и понятно дело это не простое и для него внутри класса может быть масс переменных и других методов, выполняющих промежуточные задание. Вот теперь представьте, что все бы они были бы Public и мы могли бы из своего кода изменить любую внутреннюю переменную или вызвать промежуточный метод. В результате таких действий мы сломаем работу данного экземпляра класса, так как разработчики не задумывали, что бы в нем ковырялись.

    Вот и все для чего нужны модификаторы доступа. Для того что бы внутреннюю логику нельзя было случайно сломать из-вне. И именно случайно, так как намеренно ломать свой код использующий чужие dll не имеет смысла.


    VB.Net - WPF, UWP

    • Помечено в качестве ответа DevingAs 5 апреля 2016 г. 7:31
    5 апреля 2016 г. 6:30
    Отвечающий
  • Подскажите, пожалуйста, где понятно и коротко расписана разница между этими словами? Чтоб автору можно было верить и не нужно было читать пару сотен страниц мути. 
    5 апреля 2016 г. 7:26
  • Подскажите, пожалуйста, где понятно и коротко расписана разница между этими словами? Чтоб автору можно было верить и не нужно было читать пару сотен страниц мути. 

    Между какими именно?

    VB.Net - WPF, UWP

    5 апреля 2016 г. 8:29
    Отвечающий
  • Между какими именно?
    Ну которые озвучивались в вопросе: public, private, static и так далее... Эти три слова частично понимаю, но internal и прочие пока не использовала. А вдруг мне их тоже надо знать, так и помру не грамотной.)))
    5 апреля 2016 г. 10:54
  • Я попробовал Internal - работает как public.

    :)

    5 апреля 2016 г. 11:20
  • Ну которые озвучивались в вопросе: public, private, static и так далее... Эти три слова частично понимаю, но internal и прочие пока не использовала. А вдруг мне их тоже надо знать, так и помру не грамотной.)))

    Ну Static немного из другой истории. Вообще это все ключевые слова конкретного языка и относятся они к модели языка. Соответственно, что бы неплохо разбираться в C#, стоит почитать руководство на MSDN. но если такой формат не удобен, то думаю не составит труда найти книгу где будет написано более простым языком.

    Что же до Public и Private, то это модификаторы доступа и пишут о них тут. Откровенно говоря у меня то же редко возникают ситуации когда требуются модификаторы доступа отличные от Public и Private.


    VB.Net - WPF, UWP

    5 апреля 2016 г. 11:28
    Отвечающий
  • Что же до Public и Private, то это модификаторы доступа и пишут о них тут. Откровенно говоря у меня то же редко возникают ситуации когда требуются модификаторы доступа отличные от Public и Private.
    Ура, узнала новые слова "модификаторы доступа". Думаю о них и спрашивал автор топика. Ссылку сохраню и на досуге как-нибудь по разбираюсь с ними и их сочетаниями. Вопрос пока для меня сложный, и применение "protected" и "internal" отложу на потом... ((( Спасибо за ликбез!
    5 апреля 2016 г. 14:04