2014-12-10 8 views
0

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

Предположим, что несколько методов в классе B хотят получить доступ к нескольким полям, объявленным в классе A. Должен ли я передать все поля в качестве параметров методам, начиная с класса A и вниз по потенциально длинному дереву вызовов в классе B? classBInstance.StartOfLongCallTree(p1, p2, p3)

Или, должен ли я публиковать поля и передавать this методам. Таким образом, мне нужно передать только один параметр: classBInstance.StartOfLongCallTree(this).

Или, должен ли я создавать поля/свойства статические и получать к ним доступ без каких-либо параметров? Это применимо только в том случае, если поля, разумеется, не должны меняться. classBInstance.StartOfLongCallTree(). ClassA.p1 и т. Д., Для доступа к статическим полям.

Пример CancellationToken для отмены циклов в потоках. У меня есть длинное дерево вызовов в моей программе, которое проходит через два класса/потоки. Я могу либо передать токен вниз по дереву вызовов, либо я могу сделать его общедоступным статическим свойством, чтобы вообще не пропускать его. На какой я должен пойти?

Большое спасибо.

+0

Вы не проходят занятия, вы передаете объекты, которые являются экземплярами класса – Andrew

+0

Вы можете использовать интерфейс для всех представителей общественности и передать 'this'. Я бы не рекомендуется создавать методы/члены в статике класса B, если у вас нет веских оснований для этого. Можете ли вы добавить примерный пример того, что вы пробовали до сих пор. – jacqijvv

+0

@ Андрю Я не могу найти, где я сказал, что я проходил класс. Я исправлю это, если у меня будет эта опечатка. Я передаю «это», что является экземпляром. – Anders

ответ

0

В зависимости от применения, что делает поле или методы, как STATIS может быть очень опасность, потому что они одни и те же в каждом случае их владельца класса, но большую часть времени, когда более чем один Атрибут аренды сказать класс A требуется в классе скажет B то класс B будет содержит экземпляр класса вместо него это атрибутов и будет использовать этот экземпляр для доступа поля, так что достаточно просто передать это внутри к B