2016-03-11 3 views
4

Выполнял объектив-c в течение 5 лет, поэтому, пожалуйста, несите меня.Зачем использовать вложенные классы?

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

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

class DataImporter { 
    } 

class DataGenerator { 
    } 

Но я не понимаю, почему было бы полезно использовать вложенную схему, такую ​​как следующее.

class DataImporter { 
    class DataGenerator { 
    } } 
+0

Если внутренний класс используется ** только ** внешним классом для своих целей. – ryantxr

ответ

4

Вы бы сделали это для Namespacing. Таким образом, вы можете иметь классы с тем же именем (например, DataGenerator). Но для разных целей. Это будет класс DataImporter.DataGenerator, но у вас может быть еще один класс OtherClass.DataGenerator, который был бы совсем другим.

Как и в Objective-C, когда у вас было 2 или 3 буквы перед названием класса (например: UIView). Но когда вы создали свое собственное, это было бы как SSView

Вы также можете объявить внутренний класс приватным и использовать его только в этом файле.

+0

Не модули теперь решают эту проблему? – sbarow

+0

Да, они делают. Это просто дополнительный способ сделать это в модуле. Возможно, вы захотите иметь классы с одним и тем же именем в одном модуле. Также объявление класса как частного позволяет вам использовать его в этом файле, но делает его невидимым для других файлов. –

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