Estoy aprendiendo ASP.NET MVC y puedo leer documentos en inglés, pero realmente no entiendo lo que está sucediendo en este código:
public class Genre
{
public string Name { get; set; }
}
¿Qué significa esto { get; set; }
?
c#
properties
kn3l
fuente
fuente
{get; set;}
estás creando un Campo pero si pones el{get; set;}
estás creando una Propiedad . Tener una propiedad podría facilitar algunas cosas, especialmente cuando se trabaja con Reflection.Respuestas:
Es una llamada propiedad automática, y es esencialmente una abreviatura de lo siguiente (el compilador generará un código similar):
fuente
=
operador, pero solo para un elemento en particular, ¿verdad?name
se crea una variable privada . Si trató de hacer referencia a esta variable privada dentro de la clase, fallará. No estoy seguro de cómo lo hace C #, pero se comporta como si hubiera una variable privada sin nombre, a la que no puede acceder en su código.Entonces, según tengo entendido,
{ get; set; }
es una "propiedad automática" que, al igual que @Klaus y @Brandon dijeron, es una forma abreviada de escribir una propiedad con un "campo de respaldo". Entonces en este caso:Sin embargo, si eres como yo, hace aproximadamente una hora, no entiendes realmente qué son las propiedades y los accesorios , y tampoco tienes la mejor comprensión de algunas terminologías básicas. MSDN es una gran herramienta para aprender cosas como esta, pero no siempre es fácil de entender para los principiantes. Así que voy a tratar de explicar esto más en profundidad aquí.
get
yset
son accesores , lo que significa que pueden acceder a datos e información en campos privados (generalmente desde un campo de respaldo ) y generalmente lo hacen desde propiedades públicas (como puede ver en el ejemplo anterior).No se puede negar que la declaración anterior es bastante confusa, así que veamos algunos ejemplos. Digamos que este código se refiere a géneros de música. Entonces dentro de la clase Género, vamos a querer diferentes géneros de música. Digamos que queremos tener 3 géneros: Hip Hop, Rock y Country. Para hacer esto, usaríamos el nombre de la Clase para crear nuevas instancias de esa clase.
Ahora que hemos creado las instancias de la clase Genre, podemos establecer los nombres de los géneros utilizando la propiedad 'Name' que se estableció arriba.
Podemos establecer el nombre de 'g1' en Hip Hop escribiendo lo siguiente
Lo que está sucediendo aquí es algo complejo. Como dije antes,
get
yset
acceda a información de campos privados a los que de otro modo no podría acceder.get
solo puede leer información de ese campo privado y devolverla.set
solo puede escribir información en ese campo privado. Pero al tener una propiedad con ambosget
yset
podemos hacer ambas funciones. Y al escribirg1.Name = "Hip Hop";
, estamos utilizando específicamente laset
función de nuestra propiedad Nombreset
usa una variable implícita llamadavalue
. Básicamente, lo que esto significa es que cada vez que ves "valor" dentroset
, se refiere a una variable; la variable "valor". Cuando escribimosg1.Name =
estamos usando=
para pasar lavalue
variable que en este caso es"Hip Hop"
. Así que esencialmente puedes pensarlo así:Es importante tener en cuenta que el ejemplo anterior no está escrito en el código. Es más un código hipotético que representa lo que está sucediendo en segundo plano.
Así que ahora que hemos establecido el Nombre de la instancia g1 de Genre , creo que podemos obtener el nombre escribiendo
y si ejecutamos esto, entraríamos
"Hip Hop"
en nuestra consola.Entonces, para el propósito de esta explicación, también completaré el ejemplo con resultados
Salida:
fuente
set{name = value;} // 'value' here is equal to "Hip Hop"
get
yset
. El enlace que proporcioné tiene una excelente cita de John Guttag en la parte superior de la página. Recomendaría leer su libro o incluso tomar este curso en línea gratuitopublic class Genre{public string Name;}
en lugar de:public class Genre{ public string Name { get; set; }}
. Quiero decir, ¿por qué necesitamos {get; conjunto; }?Esas son propiedades automáticas
Básicamente, otra forma de escribir una propiedad con un campo de respaldo.
fuente
get
y persiste al usarset
). Al igual que el armario para el cualget
yset
abre la puerta._name
. En la propiedad automática, el campo de respaldo está oculto.Esta es la forma corta de hacerlo:
fuente
Es un acceso directo para exponer miembros de datos como públicos para que no necesite crear explícitamente un miembro de datos privado. C # creará un miembro de datos privados para usted.
Podría hacer públicos sus miembros de datos sin usar este acceso directo, pero si decidiera cambiar la implementación del miembro de datos para tener algo de lógica, necesitaría romper la interfaz. En resumen, es un atajo para crear código más flexible.
fuente
Básicamente, es un atajo de:
fuente
Es una propiedad implementada automáticamente para C #.
fuente
get; set;
se llama?null
como cualquierstring
variable hastasomeInstanceOfGenere.Name = "someValue"
Son los accesores para el Nombre de propiedad pública.
Los usaría para obtener / establecer el valor de esa propiedad en una instancia de Genre.
fuente
Esa es una propiedad implementada automáticamente. Básicamente es una forma abreviada de crear propiedades para una clase en C #, sin tener que definir variables privadas para ellas. Normalmente se usan cuando no se requiere lógica adicional al obtener o establecer el valor de una variable.
Puede leer más en la Guía de programación de propiedades de implementación automática de MSDN .
fuente
El patrón get / set proporciona una estructura que permite agregar lógica durante la configuración ('set') o recuperación ('get') de una instancia de propiedad de una clase instanciada, que puede ser útil cuando se requiere cierta lógica de instanciación para propiedad.
Una propiedad solo puede tener un descriptor de acceso 'get', que se hace para que esa propiedad sea de solo lectura
Al implementar un patrón get / set, se usa una variable intermedia como contenedor en el que se puede colocar un valor y extraer un valor. La variable intermedia suele estar prefijada con un guión bajo. Esta variable intermedia es privada para garantizar que solo se pueda acceder a través de sus llamadas get / set. Vea la respuesta de Brandon, ya que su respuesta demuestra las convenciones de sintaxis más comúnmente utilizadas para implementar get / set.
fuente
Esto significa que si crea una variable de tipo Género, podrá acceder a la variable como una propiedad
fuente
Dicha
{ get; set; }
sintaxis se denomina propiedades automáticas, sintaxis de C # 3.0Debe usar Visual C # 2008 / csc v3.5 o superior para compilar. Pero puede compilar resultados que se dirijan a .NET Framework 2.0 (no se requieren tiempo de ejecución ni clases para admitir esta característica).
fuente
En Visual Studio, si define una propiedad
X
en una clase y desea usar esta clase solo como un tipo, después de construir su proyecto, recibirá una advertencia que dice "El campo X nunca se asigna y siempre tendrá su valor predeterminado valor " .Añadiendo una
{ get; set; }
aX
la propiedad, no se va a esta advertencia.Además, en Visual Studio 2013 y versiones superiores, al agregar
{ get; set; }
puede ver todas las referencias a esa propiedad.fuente
Es básicamente una taquigrafía. Puede escribir
public string Name { get; set; }
como en muchos ejemplos, pero también puede escribirlo:¿Por qué se usa? Se puede usar para filtrar el acceso a una propiedad, por ejemplo, no desea que los nombres incluyan números.
Dejame darte un ejemplo:
Oficialmente se llama Propiedades de implementación automática y es un buen hábito leer la ( guía de programación ). También recomendaría el video tutorial C # Propiedades: ¿Por qué usar "get" y "set" ?
fuente
Get set son modificadores de acceso a la propiedad. Obtener lee el campo de propiedad. Set establece el valor de la propiedad. Obtener es como acceso de solo lectura. Establecer es como acceso de solo escritura. Para usar la propiedad como lectura, se deben usar get y set.
fuente
Get se invoca cuando la propiedad aparece en el lado derecho (RHS) El conjunto se invoca cuando la propiedad aparece en el lado izquierdo (LHS) del símbolo '='
Para una propiedad implementada automáticamente, el campo de respaldo funciona detrás de la escena y no es visible.
Ejemplo:
Mientras que para una propiedad no implementada automáticamente, el campo de respaldo es inicial, visible como una variable de ámbito privado.
Ejemplo:
Además, vale la pena señalar aquí que el 'getter' y el 'setter' pueden usar los diferentes 'campos de respaldo'
fuente
Definir las variables privadas.
Dentro del constructor y carga los datos
He creado Constante y cargo los datos de constante a la clase Lista seleccionada.
fuente
Una propiedad es como una capa que separa la variable privada de otros miembros de una clase. Desde el mundo exterior parece que una propiedad es solo un campo, se puede acceder a una propiedad usando .Property
FullName es una propiedad. El que tiene flecha es un atajo. Desde el mundo exterior, podemos acceder a FullName de esta manera:
A las personas que llaman no les importa cómo implementó FullName. Pero dentro de la clase puedes cambiar FullName lo que quieras.
Consulte la documentación de Microsoft para obtener una explicación más detallada:
https://docs.microsoft.com/en-us/dotnet/csharp/properties
fuente