JavaとC#のコンストラクタさん
おしごとでJavaとC#を同時に使うことになってたりしまして、C#の知識不足のせいで「同じようなことをやれば良いだけ」みたいなこと言われてもぐぬぬしちゃう今日この頃です。
そんな中から、コンストラクタさんのお話。
参考:#51 コンストラクタと継承 « C# « a wandering wolf
ふつうの
// Java public class Hoge { public Hoge() { } public Hoge(int i) { } }
// C# public class Hoge { public Hoge() { } public Hoge(int i) { } }
継承したとき
// Java public class Fuga extends Hoge { public Fuga() { this(0); } public Fuga(int i) { super(i); } }
Javaだとコンストラクタの中で、thisやsuperって書きます。
// C# public class Fuga { public Fuga() : this(0) { } public Fuga(int i) : base(i) { } }
C#だとコロンで続けて、ブロックの前にthisやbaseって書くようです。
省略したとき
// Java public class Fuga extends Hoge { public Fuga() { } public Fuga(int i) { } }
省略した時はブロックの先頭に super(); がついてるようなもんです。なのでコンストラクタの引数に関わらず Hoge() が実行されます。
// Java public class Fuga extends Hoge { public Fuga() { super(); } public Fuga(int i) { super(); } }
こういうこと。
// C# public class Fuga : Hoge { public Fuga() { } public Fuga(int i) { } }
省略した時はブロックの直前に : base() がついてるようなもんです。なのでコンストラクタの引数に関わらず Hoge() が実行されます。
// C# public class Fuga : Hoge { public Fuga() : base() { } public Fuga(int i) : base() { } }
こういうこと。
まとめ
なんだ、同じか。