none
Как правильно организовать поля класса? RRS feed

  • Вопрос

  • Есть главный класс, экземпляр которого по сути и представляет собою само приложение, у класса много полей-свойств и много методов. Я делаю все свойства и методы private, потому что они используются только в этом классе.

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

     

    • Перемещено Tagore Bandlamudi 1 октября 2010 г. 21:38 MSDN Forums consolidation (От:Visual C#)
    25 июля 2010 г. 13:35

Ответы

  • Если методы класса, используются только внутри класса, то можно напрямую к полям этого класса.
    Но этого способа следующие минусы:
    -непонятно какие входные данные нужны для работы метода,
     информативность теряется
    -в дальнейшем если понадобиться использовать методы класса
     в других класса придется переписывать код

    Рекомендуется передавать данные через параметры

    • Помечено в качестве ответа Qwester33 25 июля 2010 г. 17:11
    25 июля 2010 г. 14:23
  • Правильнее - выбрать один из вариантов.

    - передавать везде как параметры, но не делать передаваемые переменные членами класса. 

    - не передавать такие переменные как параметры вообще, делать все обращения напрямую.

    - не делать класс с много-много-полей-свойств-методов. Порезать его на мелкие классы, каждому отдать свою роль.

    • Помечено в качестве ответа Qwester33 25 июля 2010 г. 17:11
    25 июля 2010 г. 15:06
  • Естественный вопрос - если нигде не читать значения из полей класса, а всегда передавать их как параметры - то зачем вообще заводить такие write-only поля? :) Ну и опять же - кем рекомендуется?
    • Помечено в качестве ответа Qwester33 25 июля 2010 г. 17:11
    25 июля 2010 г. 15:07
  • На твоем месте - я бы не стал заморачиваться с временем на выделение памяти под локальные ссылочные переменные. Место в памяти под них не ищется, на инициализацию тоже затраты мизерные. Пока точно не поймешь на что тратится время при выполнении программы - не пытайся оптимизировать.

    Можешь почитать http://simple-cs.ru/store/csharp/4/, там есть абзац про стек.

    • Помечено в качестве ответа Qwester33 26 июля 2010 г. 11:55
    25 июля 2010 г. 20:13
  • Если класс - настоящий класс, а не "все приложение" из первого поста - то нет вообще никакого смысла передавать значения свойств еще и через параметры. Очевидно же :)
    • Помечено в качестве ответа Qwester33 31 июля 2010 г. 11:02
    31 июля 2010 г. 8:05

Все ответы

  • Если методы класса, используются только внутри класса, то можно напрямую к полям этого класса.
    Но этого способа следующие минусы:
    -непонятно какие входные данные нужны для работы метода,
     информативность теряется
    -в дальнейшем если понадобиться использовать методы класса
     в других класса придется переписывать код

    Рекомендуется передавать данные через параметры

    • Помечено в качестве ответа Qwester33 25 июля 2010 г. 17:11
    25 июля 2010 г. 14:23
  • Правильнее - выбрать один из вариантов.

    - передавать везде как параметры, но не делать передаваемые переменные членами класса. 

    - не передавать такие переменные как параметры вообще, делать все обращения напрямую.

    - не делать класс с много-много-полей-свойств-методов. Порезать его на мелкие классы, каждому отдать свою роль.

    • Помечено в качестве ответа Qwester33 25 июля 2010 г. 17:11
    25 июля 2010 г. 15:06
  • Естественный вопрос - если нигде не читать значения из полей класса, а всегда передавать их как параметры - то зачем вообще заводить такие write-only поля? :) Ну и опять же - кем рекомендуется?
    • Помечено в качестве ответа Qwester33 25 июля 2010 г. 17:11
    25 июля 2010 г. 15:07
  • Спасибо, принцип понял.

    Еще вот такой вопрос возник - если определенный метод срабатывает постоянно (десятки раз в секунду), то все равно рекомендуется объявлять ссылочные переменные как можно ближе к месту их использования (то есть они будут постоянно инициализороваться, использоваться, и исчезать), или же логичнее объявить их заранее, чтобы под эту переменную использовалось одно и то же место в памяти, и туда просто перезаписывались ссылки, без поиска места в памяти и инициализации. Или, может быть, это зависит от типа ссылки, то есть от того, изменяет ли она свой размер?

    25 июля 2010 г. 17:23
  • На твоем месте - я бы не стал заморачиваться с временем на выделение памяти под локальные ссылочные переменные. Место в памяти под них не ищется, на инициализацию тоже затраты мизерные. Пока точно не поймешь на что тратится время при выполнении программы - не пытайся оптимизировать.

    Можешь почитать http://simple-cs.ru/store/csharp/4/, там есть абзац про стек.

    • Помечено в качестве ответа Qwester33 26 июля 2010 г. 11:55
    25 июля 2010 г. 20:13
  • А если такая ситуация, что: есть класс, у него очень много свойств, которые должны задаваться при создании его экземпляра. Далее, эти свойства используются при работе методов класса, но используются таким образом, что сначала метод использует одни свойства, затем этот метод вызывает другой метод, который использует другие свойства, а потом этот другой метод вызывается еще один метод, использующий уже другие свойства класса.

    То есть если передавать все необходимое для работы всех методов через параметры, получается, что аргументы, необходимые для работы последнего метода в цепочке, будут предварительно передаваться через два-три метода без всякого использования.

    А альтернатива тут не передвать эти свойства вообще, а из методов обращаться сразу напрямую через this.свойство

    Как лучше поступить в описанной ситуации?

    30 июля 2010 г. 23:31
  • Если класс - настоящий класс, а не "все приложение" из первого поста - то нет вообще никакого смысла передавать значения свойств еще и через параметры. Очевидно же :)
    • Помечено в качестве ответа Qwester33 31 июля 2010 г. 11:02
    31 июля 2010 г. 8:05