VBに挑んで印象的だったのがinterfaceの実装。
Public Interface ほげらぶる
Sub ほげ()
End Interface
Public Class マグさん
Implements ほげらぶる
Public Sub ほげじゃないメソッド() Implements ほげらぶる.ほげ
System.Console.WriteLine("仕事終わらないんですか?先に寝ますよ。")
End Sub
End Class
それってどぉよ!? が正直な感想。
メソッド名がどうであれ、Implements ほげらぶる.ほげ 付ければ
そいつが interface を実装しちゃう。
ま、たしかに、実装サイドでのメソッド名がなんであろうが
interfaceサイドにしてみりゃ ほげ() れさえすればいいもんね。
一方、↓こんなことできないのね。
----- C# -----
public interface ほげらぶる {
void ほげ();
}
// ほげらぶる ではないが、シグニチャの一致するメソッドを持つ
public class マグさん {
public void ほげ() {
System.Console.WriteLine("仕事終わらないんですか?先に寝ますよ。");
}
}
// なんと! こんだけで ほげらぶる interface を実装する マグさんに!!
public class ほげマグさん : マグさん, ほげらぶる {
}
class Program {
public static void Main() {
ほげらぶる hoge = new ほげマグさん();
hoge.ほげ();
}
}
VBだと
Public Class ほげマグさん
Inherits マグさん
Implements ほげらぶる
' 基底クラスに横流ししてあげんとな。
private Sub ほげ代理() Implements ほげらぶる.ほげ
MyBase.ほげ()
End Sub
End Class