我有这样的类结构:
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
方法?
答案 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