Tipos y variables
FUENTE DE INFORMACIÓN: https://docs.microsoft.com/es-es/dotnet/csharp/tour-of-csharp/
Un tipo define la estructura y el comportamiento de los datos en C#. La declaración de un tipo puede incluir sus miembros, tipo base, interfaces que implementa y operaciones permitidas para ese tipo. Una variable es una etiqueta que hace referencia a una instancia de un tipo específico.
Hay dos clases de tipos en C#: tipos de valor y tipos de referencia. Las variables de tipos de valor contienen directamente sus datos. Las variables de tipos de referencia almacenan referencias a los datos, lo que se conoce como objetos. Con los tipos de referencia, es posible que dos variables hagan referencia al mismo objeto y que, por tanto, las operaciones en una variable afecten al objeto al que hace referencia la otra. Con los tipos de valor, cada variable tiene su propia copia de los datos y no es posible que las operaciones en una variable afecten a la otra (excepto para las variables de parámetro ref y out).
Un identificador es un nombre de variable. Un identificador es una secuencia de caracteres Unicode sin ningún espacio en blanco. Un identificador puede ser una palabra reservada de C# si tiene el prefijo @. El uso de una palabra reservada como identificador puede ser útil al interactuar con otros lenguajes.
Los tipos de valor de C# se dividen en tipos simples, tipos de enumeración, tipos de estructura, tipos de valor que aceptan valores NULL y tipos de valor de tupla. Los tipos de referencia de C# se dividen en tipos de clase, tipos de interfaz, tipos de matriz y tipos delegados.
En el esquema siguiente se ofrece información general del sistema de tipos de C#.
- Tipos de valor
- Tipos simples
- Entero con signo:
sbyte,short,int,long - Entero sin signo:
byte,ushort,uint,ulong - Caracteres Unicode:
char, que representa una unidad de código UTF-16 - Punto flotante binario IEEE:
float,double - Punto flotante decimal de alta precisión:
decimal - Booleano:
bool, que representa valores booleanos, valores que sontrueofalse
- Entero con signo:
- Tipos de enumeración
- Tipos definidos por el usuario con el formato
enum E {...}. Un tipoenumes un tipo distinto con constantes con nombre. Cada tipoenumtiene un tipo subyacente, que debe ser uno de los ocho tipos enteros. El conjunto de valores de un tipoenumes igual que el conjunto de valores del tipo subyacente.
- Tipos definidos por el usuario con el formato
- Tipos de estructura
- Tipos definidos por el usuario con el formato
struct S {...}
- Tipos definidos por el usuario con el formato
- Tipos de valores que aceptan valores NULL
- Extensiones de todos los demás tipos de valor con un valor
null
- Extensiones de todos los demás tipos de valor con un valor
- Tipos de valor de tupla
- Tipos definidos por el usuario con el formato
(T1, T2, ...)
- Tipos definidos por el usuario con el formato
- Tipos simples
- Tipos de referencia
- Tipos de clase
- Clase base definitiva de todos los demás tipos:
object - Cadenas Unicode:
string, que representa una secuencia de unidades de código UTF-16 - Tipos definidos por el usuario con el formato
class C {...}
- Clase base definitiva de todos los demás tipos:
- Tipos de interfaz
- Tipos definidos por el usuario con el formato
interface I {...}
- Tipos definidos por el usuario con el formato
- Tipos de matriz
- Unidimensional, multidimensional y escalonada. Por ejemplo,
int[],int[,]yint[][].
- Unidimensional, multidimensional y escalonada. Por ejemplo,
- Tipos delegados
- Tipos definidos por el usuario con el formato
delegate int D(...)
- Tipos definidos por el usuario con el formato
- Tipos de clase
Los programas de C# utilizan declaraciones de tipos para crear nuevos tipos. Una declaración de tipos especifica el nombre y los miembros del nuevo tipo. Seis de las categorías de tipos de C# las define el usuario: tipos de clase, tipos de estructura, tipos de interfaz, tipos de enumeración, tipos de delegado y tipos de valor de tupla. También puede declarar tipos record, bien sean record struct o record class. Los tipos de registro tienen miembros sintetizados por el compilador. Los registros se usan principalmente para almacenar valores, con un comportamiento mínimo asociado.
- A tipo
classdefine una estructura de datos que contiene miembros de datos (campos) y miembros de función (métodos, propiedades y otros). Los tipos de clase admiten herencia única y polimorfismo, mecanismos por los que las clases derivadas pueden extender y especializar clases base. - Un tipo
structes similar a un tipo de clase, por el hecho de que representa una estructura con miembros de datos y miembros de función. Pero a diferencia de las clases, las estructuras son tipos de valor y no suelen requerir la asignación del montón. Los tipos de estructura no admiten la herencia especificada por el usuario y todos se heredan implícitamente del tipoobject. - Un tipo
interfacedefine un contrato como un conjunto con nombre de miembros públicos. Un valorclassostructque implementainterfacedebe proporcionar implementaciones de miembros de la interfaz. Uninterfacepuede heredar de varias interfaces base, y unclassostructpueden implementar varias interfaces. - Un tipo
delegaterepresenta las referencias a métodos con una lista de parámetros determinada y un tipo de valor devuelto. Los delegados permiten tratar métodos como entidades que se puedan asignar a variables y se puedan pasar como parámetros. Los delegados son análogos a los tipos de función proporcionados por los lenguajes funcionales. También son similares al concepto de punteros de función de otros lenguajes. A diferencia de los punteros de función, los delegados están orientados a objetos y tienen seguridad de tipos.
