2012-01-26 12 views
7

Me gusta .NET propiedades automáticas, en C# que sea tan fácil para declarar readonly propiedad declarando su sección set como private así:ReadOnly ¿Propiedad o propiedad con un conjunto privado que debo usar en vb.net?

public String Name{ get; private set; } 

Pero cuando traté de que en VB.NET Me sorprendió que es no soportado como se mencionó here y tengo que escribirlo de la siguiente manera:

Private _Name as String 
Public ReadOnly Property Name as String 
    Get 
     return _Name 
    End Get 
End Property 

O:

Private _Name as String 
Public Property Name as String 
    Get 
     return _Name 
    End Get 
    Private Set(value as String) 
     _Name = value 
    End Set 
End Property 

¿Cuál es la diferencia entre estas declaraciones en VB.NET, cuál es la preferida y por qué?

Editar

Cuál va a afectar el tiempo de compilación, el tiempo de ejecución o el rendimiento en absoluto?

Respuesta

6

En el caso de ReadOnly, solo aquellos con acceso a la variable subyacente pueden cambiar el valor subyacente (es decir, elementos dentro de la misma clase, por ejemplo) aplicando directamente dicho cambio. En este último caso, Private Set - esto es muy parecido - los elementos dentro del alcance de la clase pueden cambiar el valor subyacente, pero pueden hacerlo a través de la propiedad.

El que se prefiere es circunstancial: una ventaja de las propiedades es que, al igual que un método, puede tener una implementación adicional al aplicar el cambio (aunque se deben evitar los efectos secundarios, puede 'validar' y tomar excepciones, por ejemplo). Si hay siempre algo más que hacer al establecer el valor, que está fuertemente relacionado con la configuración del valor, puede hacerlo dentro de este conjunto de propiedades, en lugar de tener que codificar esa implementación en cualquier lugar donde haga el set.

1

el primer bloque solo le permitirá obtener el valor de Nombre. no puedes configurar Nombre.

el segundo bloque le permite establecer el valor de Nombre dentro de la clase. ejemplo:

Me.Name = "new value" 

Elegiría la opción 1 porque la segunda opción es prolija sin proporcionar ningún valor real.

0

La primera declaración de propiedad ReadOnly hace que la propiedad no se pueda modificar en absoluto. El segundo Private Set permite modificar la propiedad dentro de la clase en la que está trabajando en Me.Name = "str".

En ambos casos, el valor subyacente aún se puede cambiar dentro de la clase utilizando _Name = "str".

Cuestiones relacionadas