在vb.net中覆盖和隐藏函数之间有什么实际区别?

时间:2011-04-04 19:49:04

标签: vb.net oop

  

可能重复:
  Shadows vs. Overrides in VB.Net

在子类的基类中隐藏函数和覆盖相同的函数之间的区别是什么?还涉及性能问题吗?

我知道如何在VB.net中使用阴影以及如何覆盖。我的问题是我何时以及为什么要遮蔽一个函数而不是覆盖它,反之亦然。

谢谢!

2 个答案:

答案 0 :(得分:1)

Here is an answer in terms of C#,但我相信最重要的解释很容易理解为VB.Net。

VB.Net中的阴影在C#中使用“new”完成,并且覆盖显式使用“覆盖”。从VB.Net的角度来看,如果其他任何事情都难以理解,请告诉我。

答案 1 :(得分:1)

我还没有找到Shadows的用途。 一个区别是,如果从基类调用覆盖/阴影的方法,如果它被覆盖,子类中的方法将被调用,如果它被遮蔽,则仍将调用基类方法(只有子类知道阴影输出)。

参见示例代码,它输出A,B A

   Sub Main()

        Dim ClassA As New A
        Dim ClassB As New B
        Dim ClassC As New C

        Console.WriteLine(ClassA.GetText)
        Console.WriteLine(ClassB.GetText)
        Console.WriteLine(ClassC.GetText)

        Console.ReadKey()
    End Sub


    Public Class A

        Public Function GetText()
            Return GetSomeText()
        End Function

        Protected Overridable Function GetSomeText()
            Return "A"
        End Function

    End Class

    Public Class B
        Inherits A

        Protected Overrides Function GetSomeText() As Object
            Return "B"
        End Function

    End Class

    Public Class C
        Inherits A

        Protected Shadows Function GetSomeText()
            Return "C"
        End Function
    End Class