Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En C#, la definición de un tipo (una clase, estructura o registro) es como un plano técnico que especifica lo que puede hacer el tipo. Un objeto es básicamente un bloque de memoria asignado y configurado según el plano técnico. En este artículo se proporciona información general sobre estos planos técnicos y sus características. En el siguiente artículo de esta serie se presentan objetos.
Encapsulación
La encapsulación se conoce a veces como primer pilar o principio de programación orientada a objetos. Una clase o estructura puede especificar cómo es accesible cada uno de sus miembros para codificar fuera de la clase o estructura. Los miembros que no están diseñados para usuarios fuera de la clase o del ensamblado están ocultos para limitar posibles errores de codificación o exploits maliciosos. Para obtener más información, consulte el tutorial de programación orientada a objetos.
Miembros
Los miembros de un tipo incluyen todos los métodos, campos, constantes, propiedades y eventos. En C#, no hay variables o métodos globales, ya que hay en otros lenguajes. Incluso el punto de entrada de un programa, el Main
método , debe declararse dentro de una clase o estructura (implícitamente cuando se usan instrucciones de nivel superior).
En la lista siguiente se incluyen todos los distintos tipos de miembros que se pueden declarar en una clase, estructura o registro.
- Campos
- Constantes
- Propiedades
- Métodos
- Constructores
- Eventos
- Finalizadores
- Indexadores
- Operadores
- Tipos anidados
Para obtener más información, vea Miembros.
Accesibilidad
Algunos métodos y propiedades están diseñados para llamarse o acceder a ellas desde código fuera de una clase o estructura, conocido como código de cliente. Es posible que otros métodos y propiedades solo se usen en la propia clase o estructura. Es importante limitar la accesibilidad del código para que solo el código de cliente previsto pueda llegar a él. Se especifica la accesibilidad de los tipos y sus miembros para el código cliente mediante los siguientes modificadores de acceso:
La accesibilidad predeterminada es private
.
Herencia
Las clases (pero no las estructuras) admiten el concepto de herencia. Una clase que deriva de otra clase, denominada clase base, contiene automáticamente todos los miembros públicos, protegidos e internos de la clase base, excepto sus constructores y finalizadores.
Las clases se pueden declarar como abstractas, lo que significa que uno o varios de sus métodos no tienen ninguna implementación. Aunque las clases abstractas no pueden ser instanciadas directamente, pueden servir como clases base para otras clases que completan la implementación faltante. Las clases también se pueden declarar como selladas para evitar que otras clases hereden de ellas.
Para obtener más información, vea Herencia y polimorfismo.
Interfaces
Las clases, estructuras y registros pueden implementar varias interfaces. Para implementar desde una interfaz, significa que el tipo implementa todos los métodos definidos en la interfaz. Para obtener más información, consulte Interfaces.
Tipos genéricos
Las clases, estructuras y registros se pueden definir con uno o varios parámetros de tipo. El código de cliente proporciona el tipo cuando crea una instancia del tipo . Por ejemplo, la List<T> clase del System.Collections.Generic espacio de nombres se define con un parámetro de tipo. El código de cliente crea una instancia de List<string>
o List<int>
para especificar el tipo que contiene la lista. Para obtener más información, vea Genéricos.
Tipos estáticos
Las clases (pero no los structs o registros) se pueden declarar como static
. Una clase estática solo puede contener miembros estáticos y no se pueden crear instancias con la new
palabra clave . Una copia de la clase se carga en la memoria cuando se carga el programa y se accede a sus miembros a través del nombre de clase. Las clases, estructuras y registros pueden contener miembros estáticos. Para obtener más información, vea Clases estáticas y miembros de clase estática.
Tipos anidados
Una clase, estructura o registro se puede anidar dentro de otra clase, estructura o registro. Para obtener más información, consulte Tipos anidados.
Tipos parciales
Puede definir parte de una clase, estructura o método en un archivo de código y otra parte en un archivo de código independiente. Para obtener más información, vea Clases y métodos parciales.
Inicializadores de objeto
Puede crear instancias e inicializar objetos de clase o estructura y colecciones de objetos asignando valores a sus propiedades. Para obtener más información, vea Cómo inicializar objetos mediante un inicializador de objeto.
Tipos anónimos
En situaciones en las que no es conveniente o necesario crear una clase con nombre, use tipos anónimos. Los miembros de datos con nombre definen tipos anónimos. Para obtener más información, consulte Tipos anónimos.
Miembros de extensión
Puede "extender" una clase sin crear una clase derivada mediante la creación de un tipo independiente. Ese tipo contiene métodos a los que se puede llamar como si pertenecían al tipo original. Para obtener más información, vea Métodos de extensión.
Variables locales con asignación implícita de tipos
Dentro de un método de clase o estructura, puede usar la escritura implícita para indicar al compilador que determine el tipo de una variable en tiempo de compilación. Para obtener más información, vea var (referencia de C#).
Registros
Puede agregar el record
modificador a una clase o a una estructura. Los registros son tipos con comportamiento integrado para la igualdad basada en valores. Un registro (ya sea record class
o record struct
) proporciona las siguientes características:
- Sintaxis concisa para crear un tipo de referencia con propiedades inmutables.
- Igualdad de valores. Dos variables de un tipo de registro son iguales si tienen el mismo tipo y, si, para cada campo, los valores de ambos registros son iguales. Las clases usan igualdad de referencia: dos variables de un tipo de clase son iguales si hacen referencia al mismo objeto.
- Sintaxis concisa para la mutación no destructiva.
Una
with
expresión permite crear una nueva instancia de registro que sea una copia de una instancia existente, pero con los valores de propiedad especificados cambiados. - Formato integrado para visualización.
El
ToString
método imprime el nombre del tipo de registro y los nombres y valores de las propiedades públicas. - Compatibilidad con jerarquías de herencia en clases de registro. Las clases de registro admiten la herencia. Las estructuras de registro no admiten la herencia.
Para obtener más información, consulte Registros.
Especificación del lenguaje C#
Para obtener más información, consulte la Especificación del lenguaje C#. La especificación del lenguaje es el origen definitivo de la sintaxis y el uso de C#.