比較といっても大きな違いは 1 つだけ。
C# は同じ型の引数でも、値渡しと参照渡し(ref または out)で別々のメソッドとして定義できるが、VB は不可。
具体的には、C# で次はコンパイル可。
VB で次はコンパイル不可。
VB は呼び出し側で ref とか out とかのキーワードを付けないから、上記のようなオーバーロードは禁止されているのだと思われる。
また、上記の C# のオーバーロードは、VB から普通に呼べないので注意。
リフレクションを使うとたぶん呼べる。
VB で使用するライブラリを C# で書く場合、上記のようなオーバーロードは避けるのが無難。
(C# と VB のちゃんぽんはオススメしないが・・・)
C# は同じ型の引数でも、値渡しと参照渡し(ref または out)で別々のメソッドとして定義できるが、VB は不可。
具体的には、C# で次はコンパイル可。
public class TestOverloadCs
{
public static void Action(int value)
{
Console.WriteLine("Action(int)");
}
public static void Action(ref int value)
{
Console.WriteLine("Action(ref int)");
}
}
VB で次はコンパイル不可。
Public Class TestOverloadVb
Public Shared Sub Action(ByVal value As Integer) 'コンパイルエラー
Console.WriteLine("Action(int)")
End Sub
Public Shared Sub Action(ByRef value As Integer)
Console.WriteLine("Action(ref int)")
End Sub
End Class
VB は呼び出し側で ref とか out とかのキーワードを付けないから、上記のようなオーバーロードは禁止されているのだと思われる。
また、上記の C# のオーバーロードは、VB から普通に呼べないので注意。
リフレクションを使うとたぶん呼べる。
VB で使用するライブラリを C# で書く場合、上記のようなオーバーロードは避けるのが無難。
(C# と VB のちゃんぽんはオススメしないが・・・)
0 件のコメント:
コメントを投稿