У меня есть интерфейс 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
(которая в целом не устарела), мне нужно для реализации OldMethod
.Соответствующий код в C # прекрасно компилируется и не выдает предупреждений:
interface I
{
[Obsolete("Use NewMethod instead.")]
void OldMethod();
void NewMethod();
}
class Explicit : I
{
public void NewMethod() { throw new NotImplementedException(); }
public void OldMethod() { throw new NotImplementedException(); }
}
class Implicit : I
{
void I.NewMethod() { throw new NotImplementedException(); }
void I.OldMethod() { throw new NotImplementedException(); }
}
Я знаю, что мог бы просто подавить предупреждение в VB , но, как правило, предупреждение компилятора указывает, чтовы делаете что-то, что не должно быть сделано таким образом.
Как реализовать интерфейс с устаревшим элементом в VB.NET без получения устаревшего предупреждения?