2009-04-27 9 views
17

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

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

Мой вопрос: что делать, сохраняя все в классе формы, на мой взгляд.

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

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

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

+0

Ваш вопрос кажется дубликат: [http://stackoverflow.com/questions/99688/private -vs-общественные-члены-в-практики, как важный-это-инкапсуляция] (http://stackoverflow.com/questions/99688/private-vs-public-members-in-practice-how-important-is- инкапсуляция) –

ответ

8

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

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

class Account 
{ 

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

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

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

примеры, когда использовать статические:

static int birth_year= 1985 

Modifiers in C# Reference даст вам более подробно всех модификаторов в C# и примеры того, как они должны быть использованы

4

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

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

3

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

+0

Когда я сказал «Я новичок в C#», я не имел в виду, что я новичок. Я был любителем паскаля несколько лет назад, я просто знаком с C#. –

+7

Это действительно просто совет. Я не хотел быть оскорбительным или говорить, что вы не хороший программист. Но когда вы говорите, что вы сделали «все статичным» и «поместили все в один класс, чтобы сделать его частным», звучит так, как будто вы не знакомы с объектно-ориентированным программированием. –

0

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

12

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

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

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

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

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

Static - это то, что логически логически входит в сферу вашего класса, но не зависит от состояния самого класса. Его следует использовать экономно, когда образец дизайна диктует его (например, singleton, factory method).

4

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

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

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

0

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

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

Видна только для класса (закрыта).

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

Вид на упаковку и все подклассы (защищенные).

Вот пример:

общественный класс велосипедов {

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; 
} 
    ... 

}

Смежные вопросы