我有一个接口I
,并且我刚刚决定弃用方法OldMethod
(因为它的名称不正确,因为我想要附加参数,所以要给它命名),并建议我的图书馆用户使用改为NewMethod
。因此,我将I
扩展如下:
Interface I
<Obsolete("Use NewMethod instead.")>
Sub OldMethod()
Sub NewMethod()
End Interface
但是,现在我所有的类实现 I
都收到了编译器警告:
Class C
Implements I
' The following line yields warning BC40000
Public Sub OldMethod() Implements I.OldMethod
Throw New NotImplementedException()
End Sub
Public Sub NewMethod() Implements I.NewMethod
Throw New NotImplementedException()
End Sub
End Class
这对我来说没有意义:要实施I
(总体上来说,不是已过时),我 必须实施{ {1}}。 C#中的相应代码可以完美编译,并且不会产生警告:
OldMethod
我知道我可以suppress the warning in VB,但是通常情况下,编译器警告指示您正在执行不应以这种方式执行的操作。
如何在VB.NET中实现具有过时成员的接口,而不会收到过时警告?
答案 0 :(得分:2)
从我的评论中充实这个答案。
实现类必须实现Obsolete
成员以履行合同,但是当接口方法标记为Obsolete
时,您也必须将相应的方法标记为Obsolete
,以使编译器确信不使用Obsolete
成员的实现。
Public Interface I
<Obsolete("Use NewMethod instead.")>
Sub OldMethod()
Sub NewMethod()
End Interface
Public Class C
Implements I
<Obsolete("Use NewMethod instead.")>
Public Sub OldMethod() Implements I.OldMethod ' No warning
Throw New NotImplementedException()
End Sub
Public Sub NewMethod() Implements I.NewMethod
Throw New NotImplementedException()
End Sub
End Class
尽管与该特定问题并不完全相关,但在研究过程中,我发现此blog post by Grant Winney解释了为什么在接口成员本身(以及实现成员)上标记过时的成员是一个好主意