1
C++では、基本クラスctor内から仮想メソッドを呼び出すと派生オーバーライドは呼び出されません。基本クラスctor内から仮想メソッドを呼び出す
Javaにあります。
C#はどうですか? (Visual StudioにATMをインストールしないでください)
C++では、基本クラスctor内から仮想メソッドを呼び出すと派生オーバーライドは呼び出されません。基本クラスctor内から仮想メソッドを呼び出す
Javaにあります。
C#はどうですか? (Visual StudioにATMをインストールしないでください)
はい、C#で動作します - オブジェクトは構築中でも「最終型」です。
Javaと同じように、これは悪い考えであり、可能な限り避けるべきです。まだ完全に初期化されていない継承「レベル」で実装されたメソッドを呼び出すかもしれません。 JavaとC#の間の実行順序で
一つの違いは、このようなC#の、初期化子とインスタンス変数、中:
private readonly DateTime creationTime = DateTime.UtcNow;
...と基底クラスのコンストラクタは、Javaでのに対し、実行前に初期化それらは、サブクラスコンストラクタの本体の直前、の後で、の後に効果的に実行され、スーパークラスコンストラクタが実行されます。