Hemos una interfaz, que puede ser extremadamente simplificada como:protegidas fijado en VB.Net para una propiedad definida en una interfaz
public interface IPersistable<T>
{
T Id { get; }
}
mayoría de los lugares que implementan la interfaz desea tenerlo de manera que hay una protegida o conjunto privado en esa propiedad, es decir, en C#:
public class Foo : IPersistable<int>
{
public int Id { get; protected set; }
}
sin embargo, no se puede conseguir cualquier código de ejemplo para compilar VB.Net que sigue el mismo patrón, mientras que todavía implementación de la interfaz, por lo que:
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
... no se compilará, pero esto sería:
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
Soy consciente de que este ejemplo es demasiado trivial, y que, posiblemente, puede lograrse mejor a través de constructores protegidas, pero me interesa si puede ser hecho de esta manera?
[EDIT:] ... y obviamente, si un tipo desea utilizar XMLSerialization, entonces las propiedades necesitarían ser de lectura/escritura pública o los tipos requerirían serializadores personalizados escritos para cada uno.
Básicamente, veo que la interfaz debe definir la accesibilidad mínima, pero VB la interpreta como la accesibilidad exacta.
+1 Me encontré con la misma situación antes de darme cuenta de que VBNET no lo permite. –