Red de conocimiento informático - Computadora portátil - Propiedades, campos y variables de C#

Propiedades, campos y variables de C#

Los campos de C# se refieren a campos privados (variables)

clase A

{

int i;

public int I

{

obtengo{....}

establecer{....}

}

}

Entre ellos, i es un campo e I es un atributo.

El campo pertenece a una clase y está definido en la clase (nota: está en. la clase, y no en un método o atributo de la clase)

En esta clase, puedes usar

este nombre de campo para acceder

Y todo Se puede acceder a los atributos de esta clase, métodos, etc.

Es decir, su alcance es toda la clase.

Las variables locales pertenecen a una función o bloque de sentencias

Su alcance comienza desde la definición y finaliza cuando sale del bloque de sentencias.

Variables, campos, dominios, propiedades, procedimientos de atributos en C#

En C#:

Dominio: Representa variables asociadas a un objeto o clase, El modificador no No importa si es público o no. (Similar a los campos)

Campo: Representa una variable asociada a un objeto o clase. En términos generales, las variables miembro cuyo modificador es público se denominan campos, mientras que a las privadas se les llama más apropiadamente variable local. (Similar a un dominio)

Atributo: Representa una extensión natural de un dominio o campo, lo que facilita el acceso a miembros privados y garantiza la encapsulación.

Dominios

Los dominios representan variables asociadas con objetos o clases. El formato de declaración es el siguiente:

atributos modificadores de campo tipo declaradores de variable;

Los modificadores de campo pueden ser: nuevo, público, protegido, interno, privado, estático, de solo lectura. De hecho, los campos son equivalentes a variables miembro simples en C++. En el siguiente código, la clase A contiene tres campos: públicos X e Y, y privado z.

clase A

{

público int x;

cadena pública y;

privado float z;

}

Campos

Los campos son variables asociadas a un objeto o clase.

Cuando una declaración de campo contiene el modificador estático, el campo introducido por la declaración es un campo estático. Solo identifica una ubicación de almacenamiento. No importa cuántas instancias de una clase se creen, solo habrá una copia de un campo estático.

Cuando una declaración de campo no contiene el modificador estático, el campo introducido por la declaración es un campo de instancia. Cada instancia de una clase contiene una copia separada de todos los campos de instancia de la clase.

En el siguiente ejemplo, cada instancia de la clase Color tiene una copia diferente de los campos de instancia r, g, b, pero solo hay una copia de los campos estáticos Negro, Blanco, Rojo, Verde y Azul:

Color de clase pública

{

Color de solo lectura estática pública Negro = nuevo Color(0, 0, 0

); Color público de solo lectura estática Blanco = nuevo Color(255, 255, 255);

Color público de solo lectura estática Rojo = nuevo Color(255, 0, 0);

Color público de solo lectura estática Verde = nuevo Color(0, 255, 0);

Color público estático de solo lectura Azul = nuevo Color(0, 0, 255);

byte privado r, g, b;

public Color(byte r, byte g, byte b) {

this.r = r

this.g = g;

this.b = b;

}

}

Como se muestra en el ejemplo, los campos de solo lectura se declaran mediante el modificador de solo lectura. Las asignaciones a campos de solo lectura solo pueden ocurrir como parte de una declaración o dentro de un constructor de instancia o un constructor estático en la misma clase.

Atributos

Para la encapsulación de la clase, el campo generalmente se establece en Privado y el atributo se establece en público para operar el campo.

Las propiedades son una extensión natural de los campos. Ambos son miembros nombrados con tipos asociados y la sintaxis para acceder a los campos y propiedades es la misma. Sin embargo, los atributos, a diferencia de los campos, no representan ubicaciones de almacenamiento. En cambio, las propiedades tienen descriptores de acceso que especifican declaraciones que deben ejecutarse cuando se leen o escriben sus valores.

Las declaraciones de propiedad son similares a los campos, excepto que las declaraciones de propiedad terminan con un descriptor de acceso get y/o un descriptor de acceso set entre delimitadores {} en lugar de un punto y coma. Una propiedad que contiene descriptores de acceso get y set se denomina propiedad de lectura y escritura. Una propiedad que solo tiene un descriptor de acceso get se denomina propiedad de solo lectura. Una propiedad que solo tiene accesores establecidos se denomina propiedad de solo escritura.

El descriptor de acceso get es equivalente a un método sin parámetros con un valor de retorno de tipo de propiedad. Además de ser el destino de una asignación, cuando se hace referencia a una propiedad en una expresión, se llama al descriptor de acceso get de la propiedad para calcular el valor de la propiedad.

El descriptor de acceso set es equivalente a un método con un único parámetro llamado valor y sin tipo de retorno.

Cuando se hace referencia a una propiedad como destino de una asignación, o como operando del operador ++ o --, se llama al descriptor de acceso set y el argumento pasado proporciona el nuevo valor.

La clase Lista declara dos propiedades, Conteo y Capacidad, que son de solo lectura y de solo escritura en orden. A continuación se muestra un ejemplo del uso de estas propiedades:

Lista de nombres = new List();

names.Capacity = 100 //Llama al descriptor de acceso del conjunto

int i = nombres.Count; //Llamar al accesor get

int j = nombres.Capacity; //Llamar al accesor get

Similar a campos y métodos, por ejemplo propiedades y Propiedades estáticas, C# admite ambas. Las propiedades estáticas tienen el modificador static en su declaración, mientras que las propiedades de instancia no.

Los accesores de propiedades pueden ser virtuales. Cuando la declaración de propiedad contiene modificadores virtuales, abstractos y de anulación, se aplicarán al descriptor de acceso de la propiedad.

Desde MSDN:

Propiedades y campos

Tanto las propiedades como los campos pueden almacenar y recuperar información en objetos. Sus similitudes hacen que sea difícil determinar cuál es la mejor opción de programación en una situación determinada.

Utilice procedimientos de propiedad cuando:

1. Cuando necesite controlar cuándo y cómo se establece o recupera un valor.

2. Cuando un atributo tiene un conjunto de valores bien definido que es necesario verificar.

3. Establecer un valor provoca algún cambio obvio en el estado del objeto (como la propiedad IsVisible).

4. Al establecer una propiedad, el valor de otras variables internas u otras propiedades cambia.

5. Cuando se debe realizar un conjunto de pasos antes de poder establecer o recuperar una propiedad.

Utilice campos en las siguientes situaciones:

1. Cuando el valor sea de tipo autovalidante. Por ejemplo, si se asigna un valor distinto de Verdadero o Falso a una variable booleana, se produce un error o una conversión automática de datos.

2. Cuando cualquier valor dentro del rango soportado por el tipo de datos es válido. Este es el caso de muchas propiedades de tipo Sencillo o Doble.

3. Cuando el atributo es del tipo de datos String y no hay restricciones en el tamaño o valor de la cadena.

La diferencia entre propiedades y variables en Visual Basic (debería ser la misma en C#)

Ambas variables y propiedades representan valores accesibles. Pero existen diferencias en el almacenamiento y la implementación.

Variables

Las variables corresponden directamente a ubicaciones de memoria. Las variables se pueden definir mediante una única declaración. Una variable puede ser una "variable local", definida dentro de un procedimiento y disponible sólo para ese procedimiento, o puede ser una "variable miembro", definida en un módulo, clase o estructura pero no definida en ningún procedimiento. Las variables miembro también se denominan "campos".

Atributos

Un atributo es un elemento de datos definido en un módulo, clase o estructura. Las propiedades se definen utilizando bloques de código entre las declaraciones de Propiedad y Propiedad Final. Este bloque de código contiene un procedimiento Get, un procedimiento Set o ambos. Estos dos procedimientos se denominan "procedimientos de propiedad" o "accesores de propiedad". Además de recuperar o almacenar el valor de una propiedad, también pueden realizar operaciones personalizadas, como actualizar los contadores de acceso.

Diferencias

La siguiente tabla identifica algunas diferencias importantes entre variables y propiedades.

Atributos de variables de diferencia

Declarar una serie de declaraciones en un único bloque de código de declaración de declaración

Implementar un código ejecutable de ubicación de almacenamiento única (procedimiento de atributo)

El almacenamiento directamente asociado con el valor de una variable generalmente contiene almacenamiento interno; estos almacenes internos no están disponibles fuera de la clase o módulo que contiene la propiedad. El valor de la propiedad puede actuar o no como un elemento de almacenamiento (ver (1). ) a continuación)

Debe existir al menos un proceso para que exista código ejecutable

Acceso de lectura y escritura lectura/escritura o solo lectura lectura/escritura, solo lectura o solo escritura

Dado que la operación de definición no se puede realizar como parte de la configuración o recuperación del valor del atributo

Nota: (1) A diferencia de las variables, el valor de un atributo puede no corresponder directamente a un único elemento de almacenamiento. El almacenamiento se puede dividir en partes por conveniencia o seguridad; los valores también se pueden almacenar en un formato cifrado. En estos casos, el procedimiento Get ensambla los fragmentos o descifra el valor almacenado, y el procedimiento Set cifra el nuevo valor o lo divide en los componentes individuales que componen el almacenamiento. El valor de la propiedad puede ser temporal, como una hora del día, en cuyo caso el procedimiento Get evaluará la propiedad a tiempo cada vez que se acceda a ella.

Diferencias entre clases y módulos

La principal diferencia entre clases y módulos es que las clases se pueden instanciar como objetos, mientras que los módulos estándar no.