vb.net 的实现和C# 的实现有很多方面都不一样,今天就拿 Overload 来做个对比。
大家可能都对 C# 比较熟悉,我列出一下一段代码:
namespace OverloaddingCS
{
public class Test
{
public static void Main()
{
Derived d=new Derived();
d.WriteLine(10);
d.WriteLine("11");
d.WriteLine(10.5);
}
}
class Base
{
public void WriteLine(String AnyString)
{
Console.WriteLine(AnyString + " called Base:String") ;
}
public void WriteLine(int AnyInteger)
{
Console.WriteLine(AnyInteger.ToString() + " called Base:Integer");
}
}
class Derived : Base
{
public void WriteLine(double AnyDouble)
{
Console.WriteLine(AnyDouble.ToString() + " called Derived:double");
}
}
}
{
public class Test
{
public static void Main()
{
Derived d=new Derived();
d.WriteLine(10);
d.WriteLine("11");
d.WriteLine(10.5);
}
}
class Base
{
public void WriteLine(String AnyString)
{
Console.WriteLine(AnyString + " called Base:String") ;
}
public void WriteLine(int AnyInteger)
{
Console.WriteLine(AnyInteger.ToString() + " called Base:Integer");
}
}
class Derived : Base
{
public void WriteLine(double AnyDouble)
{
Console.WriteLine(AnyDouble.ToString() + " called Derived:double");
}
}
}
答案很简单,如果你对c++ 比较熟悉的话
10 called Derived:double
11 called Base:String
10.5 called Derived:double
如果我把类似的代码翻译成 vb.net ,注意是原本的翻译
Class Test
Public Shared Sub Main()
Dim objMyTest As New Derived
With objMyTest
.WriteLine(10)
.WriteLine("11")
.WriteLine(10.5)
End With
Console.ReadLine()
End Sub
End Class
Class Base
Public Sub WriteLine(ByVal AnyString As String)
Console.WriteLine(AnyString + " called Base:String")
End Sub
Public Sub WriteLine(ByVal AnyInteger As Integer)
Console.WriteLine(AnyInteger.ToString + " called Base:Integer")
End Sub
End Class
Class Derived : Inherits Base
Public Overloads Sub WriteLine(ByVal AnyDouble As Double)
Console.WriteLine(AnyDouble.ToString + " called Derived:Double")
End Sub
End Class
Public Shared Sub Main()
Dim objMyTest As New Derived
With objMyTest
.WriteLine(10)
.WriteLine("11")
.WriteLine(10.5)
End With
Console.ReadLine()
End Sub
End Class
Class Base
Public Sub WriteLine(ByVal AnyString As String)
Console.WriteLine(AnyString + " called Base:String")
End Sub
Public Sub WriteLine(ByVal AnyInteger As Integer)
Console.WriteLine(AnyInteger.ToString + " called Base:Integer")
End Sub
End Class
Class Derived : Inherits Base
Public Overloads Sub WriteLine(ByVal AnyDouble As Double)
Console.WriteLine(AnyDouble.ToString + " called Derived:Double")
End Sub
End Class
代码起始是一样的。我直接公布结果,起始跟 C# 的结果不一样
10 called Base:Integer
11 called Base:String
10.5 called Derived:Double
结果出乎意料,起始也是情理之中的事情。
我就不做解释了,关键是提醒各位有 C++ 专项 VB.NET 的时候,不要想当然的以为 VB.NET 的处理方式跟 C# 一样。