Макет окна док-станции IDEA

Можно ли изменить способ расположения закрепленных окон инструментов в IDEA?

В настоящее время , самое нижнее окно занимает все горизонтальное пространство, а левое и правое окна не занимают все вертикальное пространство (из-за нижнего окна).

Можно ли расположить макет так, чтобы левое и правое закрепленные окна взять все вертикальное пространство, а нижний - то, что осталось?

Т.е. иметь это:

+-----+---------------------------+-----+
|Tree |                           |Tree |
|     | Code                      |     |
|     |                           |     |
|     |                           |     |
|     |                           |     |
|     |---------------------------|     |
|     | Messages                  |     |
|     |                           |     |
+-----+---------------------------+-----+

Вместо этого: {частная строка _privateString = "привет"; void ChangeData () {TestClass otherTestClass = новый TestClass (); otherTestClass._privateString = "мир"; } } ...

class TestClass
{
    private string _privateString = "hello";
    void ChangeData()
    {
        TestClass otherTestClass = new TestClass();
        otherTestClass._privateString = "world";
    }
}

Этот код компилируется на C #, и его эквивалент работает на PHP, но может ли кто-нибудь объяснить причину, по которой otherTestClass._privateString можно здесь изменить?

Я бы подумал, что экземпляр класса не должен иметь возможность изменять частную переменную-член ни при каких обстоятельствах, и что попытка доступа к otherTestClass._privateString приведет к «недоступности из-за уровня защиты» ошибка.

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

  • (Я не спрашиваю, является ли приведенный выше дизайн класса хорошей практикой, просто интересуюсь его теорией. )

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

27
задан mikel 7 February 2011 в 09:59
поделиться