Tut mir leid, aber ich muss den meisten anderen "Ja, Sie können" -Antworten nicht zustimmen und Folgendes sagen:
Ich würde eine Klasse davon abhalten, eine öffentliche Methode von einer anderen aufzurufen
Es gibt ein paar mögliche Probleme mit dieser Praxis.
1: Endlosschleife in inhertited Klasse
Ihre Basisklasse ruft also method1 von method2 auf, aber dann erben Sie oder jemand anderes davon und verbergen method1 mit einer neuen Methode, die method2 aufruft.
2: Ereignisse, Protokollierung usw.
Ich habe zB eine Methode Add1, die ein Ereignis '1 added!' auslöst. Ich möchte wahrscheinlich nicht, dass die Add10-Methode dieses Ereignis auslöst, zehnmal in ein Protokoll schreibt oder was auch immer.
3: Threading und andere Deadlocks
Beispiel: InsertComplexData öffnet eine Datenbankverbindung, startet eine Transaktion, sperrt eine Tabelle, ruft dann InsertSimpleData auf, öffnet eine Verbindung, startet eine Transaktion und wartet, bis die Tabelle entsperrt ist.
Ich bin mir sicher, dass es weitere Gründe gibt. Eine der anderen Antworten betraf "Sie bearbeiten Methode1 und sind überrascht, dass Methode2 sich anders verhält".
Im Allgemeinen ist es besser, wenn Sie zwei öffentliche Methoden haben, die Code gemeinsam nutzen, beide eine private Methode aufrufen zu lassen, anstatt die eine die andere aufzurufen.
Bearbeiten ----
Lassen Sie uns auf den speziellen Fall im OP eingehen.
Wir haben nicht viele Details, aber wir wissen, dass ReverseData von einer Ereignisbehandlungsroutine wie auch von der ScheduleTransmission-Methode aufgerufen wird.
Ich gehe davon aus, dass umgekehrte Daten auch den internen Zustand des Objekts ändern
In diesem Fall würde ich denken, dass Thread-Sicherheit wichtig wäre, und daher gilt mein dritter Einwand gegen die Praxis.
Um den ReverseData-Thread sicherer zu machen, können Sie eine Sperre hinzufügen. Wenn ScheduleTransmission jedoch auch threadsicher sein muss, möchten Sie dieselbe Sperre freigeben.
Am einfachsten ist es, den ReverseData-Code in eine private Methode zu verschieben und von beiden öffentlichen Methoden aufrufen zu lassen. Anschließend können Sie die lock-Anweisung in die öffentlichen Methoden einfügen und ein Sperrobjekt freigeben.
Offensichtlich kann man argumentieren, "das wird niemals passieren!" oder "Ich könnte die Sperre auf eine andere Weise programmieren", aber der Punkt bei einer guten Codierungspraxis besteht darin, den Code zunächst gut zu strukturieren.
In akademischen Begriffen würde ich sagen, dass dies das L in soliden verletzt. Öffentliche Methoden sind mehr als nur öffentlich zugänglich. Sie können auch von ihren Erben geändert werden. Ihr Code sollte für Änderungen geschlossen sein, was bedeutet, dass Sie überlegen müssen, was Sie sowohl mit öffentlichen als auch mit geschützten Methoden tun.
Hier ist noch einer: Sie verletzen möglicherweise auch DDD. Wenn es sich bei Ihrem Objekt um ein Domänenobjekt handelt, sollten die öffentlichen Methoden Domänenbegriffe sein, die für das Unternehmen von Bedeutung sind. In diesem Fall ist es sehr unwahrscheinlich, dass "ein Dutzend Eier kaufen" dasselbe ist wie "1 Ei 12-mal kaufen", auch wenn es so beginnt.