Mark Overridden成员已过时

时间:2014-11-04 16:41:24

标签: vb.net

我有这样的类结构:

Public class Student
    Public Overridable Function SayHello() As String
    End Function
End Class

Public Class Undergraduate
    Inherits Student

    <Obsolete("Marked as obselete on 04/11/14.", True)> _
    Public Overrides Function SayHello() As String
    End Function
End Class

如果Undergraduate的实例调用SayHello,那么我希望它调用该方法的Student版本。我认为应用ObseleteAttribute会实现这一点,但事实并非如此。我是否必须注释掉或删除覆盖的Undergraduate.SayHello方法?

1 个答案:

答案 0 :(得分:1)

ObsoleteAttribute不会导致编译器忽略方法的存在。编译器仍然将方法编译到程序集中,因此如果成功调用它,它的Undergraduate版本仍将被调用。该属性只是编译器嵌入到程序集中以描述方法的元数据。理想情况下,该属性将阻止消费者调用该方法,但它不会阻止该方法存在。为了强制它使用方法的基本Student版本,您可以使其成为调用基本方法的传递方法,如下所示:

Public Class Undergraduate
    Inherits Student

    Public Overrides Function SayHello() As String
        MyBase.SayHello()
    End Function
End Class

或者,更简单地说,只需完全删除该方法:

Public Class Undergraduate
    Inherits Student

    'No longer necessary, use base implementation
    'Public Overrides Function SayHello() As String
    'End Function
End Class