Извините, но мне придется не согласиться с большинством других ответов «да, можете» и сказать, что:
Я бы не рекомендовал классу вызывать один публичный метод из другого
Есть несколько потенциальных проблем с этой практикой.
1: бесконечный цикл в унаследованном классе
Таким образом, ваш базовый класс вызывает method1 из method2, но затем вы или кто-то другой наследует его и скрывает method1 новым методом, который вызывает method2.
2: события, ведение журнала и т. Д.
Например, у меня есть метод Add1, который запускает событие «1 добавлен!» Я, вероятно, не хочу, чтобы метод Add10 вызывал это событие, записывал в журнал или что-то еще десять раз.
3: многопоточность и другие тупики
Например, InsertComplexData открывает соединение с БД, запускает транзакцию, блокирует таблицу, затем вызывает InsertSimpleData, открывает соединение, запускает транзакцию и ожидает разблокировки таблицы ....
Я уверен, что есть и другие причины, один из ответов касался «вы редактируете method1 и удивляетесь, что method2 начинает вести себя по-другому»
Обычно, если у вас есть два открытых метода, которые совместно используют код, лучше, чтобы они оба вызывали закрытый метод, а не один вызывал другой.
Редактировать ----
Давайте рассмотрим конкретный случай в ОП.
у нас не так много деталей, но мы знаем, что ReverseData вызывается каким-либо обработчиком событий, а также методом ScheduleTransmission.
Я полагаю, что обратные данные также изменяют внутреннее состояние объекта
Учитывая этот случай, я бы подумал, что безопасность нити будет важна, и, следовательно, применимо мое третье возражение против практики.
Чтобы сделать поток ReverseData безопасным, вы можете добавить блокировку. Но если ScheduleTransmission также должен быть потокобезопасным, вы захотите использовать такую же блокировку.
Самый простой способ сделать это - переместить код ReverseData в закрытый метод и вызвать его для обоих открытых методов. Затем вы можете поместить оператор блокировки в Public Methods и совместно использовать объект блокировки.
Очевидно, вы можете утверждать, что "этого никогда не случится!" или «Я мог бы запрограммировать блокировку другим способом», но суть хорошей практики кодирования заключается в том, чтобы сначала хорошо структурировать ваш код.
В академическом плане я бы сказал, что это нарушает L в твердом теле. Публичные методы больше, чем просто общедоступные. Они также могут быть изменены его наследниками. Ваш код должен быть закрыт для модификации, что означает, что вы должны подумать о том, что вы делаете, как в открытых, так и в защищенных методах.
Вот еще один: вы также можете нарушить DDD. Если ваш объект является объектом домена, его открытые методы должны быть терминами домена, которые что-то значат для бизнеса. В этом случае очень маловероятно, что «купить дюжину яиц» - это то же самое, что «купить 1 яйцо 12 раз», даже если оно начинается таким образом.