あくまでメモでなのでご注意を
- 網羅的な説明になっていません
- 内容の正誤を十分検証していません
つぎのようなコードを呼ぶとき
page.Navigation.PushAsync(new NewPage());
NavigationプロパティはINavigationインターフェースの実装クラスで、その実態はNavigationProxyクラスです。
NavigationProxyはあくまでProxyクラスで、実体?はInnerプロパティに設定されています。
画面遷移するたびにProxyは作られて、Innnerは遷移前から遷移後へ受け渡されていきます。
実体は大きく二つあって、Modal遷移の場合はApplicationクラスの内部クラスのNavigationImplクラスが
Hierarchical遷移(つまりNavigationPage)の場合はNavigationPageの内部クラスのNavigationImplクラスが使われます。
でまぁ、これで終わりじゃないのがめんどうくさくって、ApplicationクラスのMainPageプロパティの設定時にNavigationImpleのさらにInnnerへ各プラットフォーム別の実装が設定されます。
Androidの場合はここ
各PlatformクラスがINavigationを実装しているんですね。
つまりINavigationの振る舞いは、当然と言えばそれまでですがプラットフォームによって異なります。
動作もちょっと違います。
私が知っている範囲だと、Modal遷移した時のNavigationStackの要素数が0だったり1だったりプラットフォームによって違う気がしています。
この辺りちゃんと調べて、必要であれば貢献したいですね。
以上です。