Overloading ,vb.net vs C#


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");
        }

    }

}


答案很简单,如果你对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


代码起始是一样的。我直接公布结果,起始跟 C# 的结果不一样

10 called Base:Integer
11 called Base:String
10.5 called Derived:Double

结果出乎意料,起始也是情理之中的事情。

我就不做解释了,关键是提醒各位有 C++ 专项 VB.NET 的时候,不要想当然的以为 VB.NET 的处理方式跟 C# 一样。


你可能感兴趣的:(overloading)