Подтвердить что ты не робот

Когда следует использовать общедоступные/частные/статические методы?

Я новичок в С#. До этого момента я использовал каждую глобальную переменную public public. Все мои методы являются public static, поэтому я могу получить к ним доступ из других классов.

Я читал на SO, что у менее публичных статических методов у меня есть, тем лучше. Поэтому я переписал свои приложения, поместив весь код в один класс - класс формы. Теперь все мои методы являются частными и нет статического метода.

Мой вопрос: что мне делать, если оставить все в классе формы, это, по-моему, свалка.

Когда я должен использовать public, когда private и когда static private/public?

Я получаю общедоступные методы как "минусы", потому что их можно декомпилировать, но я сомневаюсь в этом. Мои общедоступные методы также могут быть декомпилированы. Что такое 'private' в приватном методе?

EDIT: я не спрашиваю, как предотвратить декомпиляцию моей программы, я спрашиваю, следует ли использовать статические, частные и общедоступные. И также: есть ли проблемы при размещении всех код в классе формы, поэтому мне не нужно использовать общедоступные методы?

4b9b3361

Ответ 1

private - для членов класса, для которого вы хотите получить доступ только в классе тела, а в членах С# по умолчанию установлено личное, если не указано иное

примеры использования личных:

class Account
{

  private int pin = 1090;
  public int Pin
  {
     get { return pin; }
  }
}

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

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

примеры использования static:

  static int birth_year= 1985

Модификаторы в С# Reference дадут вам более подробную информацию обо всех модификаторах на С# и примерах того, как их следует использовать

Ответ 2

Все должно быть приватно, если не доказано иное. Разница между публичным и частным заключается в том, что должно быть совместимым и что не должно быть совместимым, что должно быть интересно миру и что не должно быть его бизнесом.

Когда вы объявляете что-то публичное, класс (и, следовательно, объект) делает сильное утверждение: это мой видимый интерфейс, есть много других подобных, но это мое. Открытый интерфейс - это договорное соглашение, которое ваш класс экспортирует в остальной мир (что бы это ни значило) о том, что он может сделать. Если вы изменяете общедоступный интерфейс, вы рискуете нарушить договор, который остальной мир предполагает в отношении класса.

С другой стороны, личные вещи являются внутренними для класса. Он поддерживает функциональные возможности, которые класс должен использовать для выполнения своей работы при переносе состояния объекта (если это метод) или сохранении его внутреннего состояния (если это переменная). Вы можете взламывать и портить личные вещи класса столько, сколько захотите, не нарушая контракт интерфейса, а это означает, что это дает вам большую свободу для рефакторинга (например, внутреннего представления данных для эффективности). Личные вещи не являются частью интерфейса.

Защищенность - это то, что подразумевает открытость к повторной реализации. Избегайте, если можете, глубоко вложенных наследств. Вы рискуете сделать вещи очень сложными в обращении, так как ваш класс переопределения может испортить базовый класс.

Технически, класс должен объявлять интерфейс (открытый) и реализацию (частный). Интерфейс не должен иметь кода вообще, просто делегировать частную логику "реализации". Вот почему в Java и С# есть оператор интерфейса, который формализует концепцию чистого абстрактного класса в C++.

Статика - это то, что логически находится в области вашего класса, но не зависит от состояния самого класса. Он должен использоваться экономно, когда шаблон проектирования диктует его (например, синглтон, заводской метод).

Ответ 3

См. Модификаторы доступа (Руководство по программированию на С#). Но было бы намного лучше, если бы вы получили достойную книгу С# и OOP/OOD: это действительно основы компьютерной науки.

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

Ответ 4

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

Например, у вас есть Класс A и Класс B. Скажем Класс A имеет 3 метода (x, y, z). Методы x, y будут использоваться Класс B, поэтому отметьте их как общедоступными, но метод z будет использоваться только методом x внутри класса A, поэтому отметьте его закрытым, так как нет необходимости подвергать этот метод внешнему миру. Логика внутри этого метода предназначена только для внутреннего использования.

Static отличается от этого украшения означает, что вы не можете создать экземпляр объекта, помеченного как static. Объект - по словам ключевого слова - статический (нельзя изменять или изменять).

Ответ 5

Я бы начал изучать основы объектно-ориентированного программирования. Там много ресурсов. Наверное, лучше всего начать курс. Вы, кажется, далеко не понимаете принципы OO.

Ответ 6

Это кажется более простым, чем связанный выше вопрос. Чтобы правильно развиваться на языке OO, вам нужно выяснить, как разложить конечную цель на ряд объектов, которые работают вместе (даже содержащие и расширяющие друг друга) для достижения серии целей. Эта абстракция имеет множество преимуществ, которые становятся очевидными после того, как вы начнете правильно внедрять OO-дизайн. Вам понадобится новая книга С#, как уже упоминалось, если вы еще не получили часть, объясняющую основы O bject O ориентированного программирования.

Ответ 7

Java предоставляет ряд модификаторов доступа для установки уровней доступа для классов, переменных, методов и конструкторов. Четыре уровня доступа:

Видимый для пакета по умолчанию. Модификаторы не нужны.

Видно только для класса (private).

Видно миру (общественность).

Видимый для пакета и всех подклассов (защищенных).

Вот пример:

Открытый класс Велосипед {

private int cadence;
private int gear;
private int speed;
private int id;
private static int numberOfBicycles = 0;

public Bicycle(int startCadence, int startSpeed, int startGear){
    gear = startGear;
    cadence = startCadence;
    speed = startSpeed;

   id = ++numberOfBicycles;
}

// new method to return the ID instance variable
public int getID() {
    return id;
}
    ...

}

Ответ 8

В дополнение к вышесказанному, подумайте о рабочем сценарии. Вы не работаете в одиночку. Ваш коллега может вызвать методы из вашего класса, которые вы на самом деле не хотите раскрывать, или подумать, что это потребует критических изменений в будущем. Это может быть в случае, если вы хотите частный