У нас есть интерфейс, который может быть значительно упрощен как:
public interface IPersistable<T>
{
T Id { get; }
}
Большинство мест, в которых реализован интерфейс, хотят иметь его, чтобы в этом свойстве был защищенный или закрытый набор, т. Е. В C #:
public class Foo : IPersistable<int>
{
public int Id { get; protected set; }
}
Тем не менее, я не могу получить пример кода VB.Net для компиляции, который следует той же схеме, пока еще реализуется интерфейс, поэтому:
Public Class Foo
Implements IPersistable(Of Integer)
Public Property Id() As Integer Implements IPersistable(Of Integer).Id
Get
Throw New NotImplementedException()
End Get
Protected Set(ByVal value As Integer)
Throw New NotImplementedException()
End Set
End Property
End Class
... не скомпилируется, но это будет:
Public Class Foo
Public Property Id() As Integer
Get
Throw New NotImplementedException()
End Get
Protected Set(ByVal value As Integer)
Throw New NotImplementedException()
End Set
End Property
End Class
Я ценю, что этот пример слишком тривиален, и, возможно, его лучше реализовать с помощью защищенных конструкторов, но мне интересно, можно ли это сделать таким образом?
[РЕДАКТИРОВАТЬ:]
... и, очевидно, если тип хочет использовать XMLSerialization, тогда свойства должны быть общедоступными для чтения / записи, или для типов потребуются собственные сериализаторы, написанные для каждого.
По сути, я вижу, что интерфейс должен определять минимальную доступность, но VB интерпретирует это как точную доступность?