c# - ejemplos - instrucciones de programacion
¿Qué es el{obtener; conjunto;}sintaxis en C#? (15)
Así como lo entiendo { get; set; }
{ get; set; }
{ get; set; }
es una "propiedad automática" que, como dicen @Klaus y @Brandon, es una abreviatura para escribir una propiedad con un "campo de respaldo". Así que en este caso:
public class Genre
{
private string name; // This is the backing field
public string Name // This is your property
{
get => name;
set => name = value;
}
}
Sin embargo, si eres como yo, hace aproximadamente una hora, no entiendes realmente qué son las propiedades y los accesores , y tampoco comprendes mejor 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
y set
son accessors , 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 afirmación anterior es bastante confusa, así que veamos algunos ejemplos. Digamos que este código se refiere a los géneros de la 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.
Genre g1 = new Genre(); //Here we''re creating a new instance of the class "Genre"
//called g1. We''ll create as many as we need (3)
Genre g2 = new Genre();
Genre g3 = new Genre();
//Note the () following new Genre. I believe that''s essential since we''re creating a
//new instance of a class (Like I said, I''m a beginner so I can''t tell you exactly why
//it''s there but I do know it''s essential)
Ahora que hemos creado las instancias de la clase Género, podemos establecer los nombres de género usando la propiedad ''Nombre'' que se estableció arriba.
public string Name //Again, this is the ''Name'' property
{ get; set; } //And this is the shorthand version the process we''re doing right now
Podemos establecer el nombre de ''g1'' en Hip Hop escribiendo lo siguiente
g1.Name = "Hip Hop";
Lo que está pasando aquí es algo complejo. Como dije antes, get
y set
información de acceso desde campos privados a los que de otra forma 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 get
y set
podemos hacer ambas funciones. Y escribiendo g1.Name = "Hip Hop";
Estamos usando específicamente la función set
de nuestra propiedad Name
set
usa una variable implícita llamada value
. Básicamente, esto significa que cada vez que vea un "valor" dentro del set
, se refiere a una variable; la variable "valor". Cuando escribimos g1.Name =
estamos usando el =
para pasar la variable de value
que en este caso es "Hip Hop"
. Así que esencialmente puedes pensar de esta manera:
public class g1 //We''ve created an instance of the Genre Class called "g1"
{
private string name;
public string Name
{
get => name;
set => name = "Hip Hop"; //instead of ''value'', "Hip Hop" is written because
//''value'' in ''g1'' was set to "Hip Hop" by previously
//writing ''g1.Name = "Hip Hop"''
}
}
Es importante tener en cuenta que el ejemplo anterior no está realmente escrito en el código. Es más bien un código hipotético que representa lo que está sucediendo en el fondo.
Así que ahora que hemos establecido el nombre de la instancia g1 de Género , creo que podemos obtener el nombre escribiendo
console.WriteLine (g1.Name); //This uses the ''get'' function from our ''Name'' Property
//and returns the field ''name'' which we just set to
//"Hip Hop"
y si ejecutáramos esto obtendríamos "Hip Hop"
en nuestra consola.
Entonces, para el propósito de esta explicación, completaré el ejemplo con resultados también.
using System;
public class Genre
{
public string Name { get; set; }
}
public class MainClass
{
public static void Main()
{
Genre g1 = new Genre();
Genre g2 = new Genre();
Genre g3 = new Genre();
g1.Name = "Hip Hop";
g2.Name = "Rock";
g3.Name = "Country";
Console.WriteLine ("Genres: {0}, {1}, {2}", g1.Name, g2.Name, g3.Name);
}
}
Salida:
"Genres: Hip Hop, Rock, Country"
Estoy aprendiendo ASP.NET MVC, y puedo leer documentos en inglés, pero realmente no entiendo lo que sucede con este código:
public class Genre
{
public string Name { get; set; }
}
Qué significa esto: { get; set; }
{ get; set; }
{ get; set; }
?
Básicamente es un atajo de:
class Genre{
private string genre;
public void getGenre() {
return this.genre;
}
public void setGenre(string theGenre) {
this.genre = theGenre;
}
}
//In Main method
genre g1 = new Genre();
g1.setGenre("Female");
g1.getGenre(); //Female
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 por defecto " .
Añadiendo un { get; set; }
{ get; set; }
{ get; set; }
a la propiedad X
, no recibirá esta advertencia.
Además en Visual Studio 2013 y versiones superiores, agregando { get; set; }
{ get; set; }
{ get; set; }
puedes ver todas las referencias a esa propiedad.
Es un método abreviado para exponer a los miembros de los datos como públicos, por lo que no es necesario crear explícitamente miembros de datos privados. C # creará un miembro de datos privados para ti.
Puede hacer que sus miembros de datos sean públicos sin utilizar este acceso directo, pero si decide cambiar la implementación del miembro de datos para tener cierta lógica, entonces deberá romper la interfaz. Entonces, en resumen, es un atajo para crear código más flexible.
Es una propiedad auto-implementada para C #.
Es una llamada propiedad automática, y es esencialmente una forma abreviada de lo siguiente (el compilador generará un código similar):
private string name;
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
Esa es una propiedad auto-implementada. Es básicamente 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 una 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 implementadas automáticamente de MSDN.
Esas son propiedades automáticas.
Básicamente otra forma de escribir una propiedad con un campo de respaldo.
public class Genre
{
private string _name;
public string Name
{
get => _name;
set => _name = value;
}
}
Esta es la forma corta de hacer esto:
public class Genre
{
private string _name;
public string Name
{
get => _name;
set => _name = value;
}
}
Esto significa que si crea una variable de tipo Género, podrá acceder a la variable como una propiedad
Genre oG = new Genre();
oG.Name = "Test";
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:
public string Log { get; set; }
Mientras que para una propiedad no implementada automáticamente, el campo de respaldo es inicial, visible como una variable de ámbito privado.
Ejemplo:
private string log;
public string Log
{
get => log;
set => log = value;
}
Además, vale la pena señalar aquí que el ''captador'' y el ''configurador'' pueden usar el ''campo de respaldo'' diferente
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 debe usar tanto get como set.
Son los que acceden al nombre de la propiedad pública.
Los usaría para obtener / establecer el valor de esa propiedad en una instancia de Género.
Tal { get; set; }
{ get; set; }
{ get; set; }
sintaxis se llama propiedades automáticas, sintaxis de C # 3.0
Debe usar Visual C # 2008 / csc v3.5 o superior para compilar. Pero puede compilar una salida que tenga como objetivo tan bajo como .NET Framework 2.0 (no se requiere tiempo de ejecución ni clases para admitir esta característica).
El patrón obtener / establecer proporciona una estructura que permite agregar la lógica durante la configuración (''conjunto'') o recuperación (''obtener'') de una instancia de propiedad de una clase instanciada, que puede ser útil cuando se requiere cierta lógica de creación de instancias para la propiedad.
Una propiedad solo puede tener un acceso ''get'', que se realiza para que esa propiedad sea de solo lectura
Cuando se implementa un patrón de obtener / establecer, una variable intermedia se usa como un contenedor en el que se puede colocar un valor y extraer un valor. La variable intermedia usualmente es prefijada con un guión bajo. esta variable intermedia es privada para garantizar que solo se pueda acceder a ella a través de sus llamadas de obtención / configuración. Vea la respuesta de Brandon, ya que su respuesta demuestra las convenciones de sintaxis más utilizadas para implementar get / set.