When you start a coroutine by providing the method name as a string, then the Unity engine uses [reflection][1] to find the method at runtime, which doesn't care about the visibility of methods.

If you would prefer proper software engineering principles - like names being resolved at compile-time and visibility rules being respected - use [the variant of StartCoroutine which takes an IEnumerator instead of a string][2] to denote the method.

 WinDialogue dialogue = _winDialogue.GetComponent<WinDialogue>()
 dialogue.StartCoroutine(dialogue.ActivateStars(starCount));
This will give you a compile-time error if `WinDialogue.ActivateStars` is private (or does not return an IEnumerator... or gets called with the wrong arguments... or is misspelled...).


 [1]: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/reflection
 [2]: https://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html