Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cuál es la diferencia de significado entre uint y long?

¿Cuál es la diferencia de significado entre uint y long?

Capítulo 4 Estructura de programación principal de C# 2

Este capítulo es un complemento del capítulo anterior. Presenta los detalles de la construcción de métodos de C#, explora varias palabras clave de métodos y el tema de la sobrecarga de métodos, y luego presenta los tipos de matriz. así como tipos de enumeración, tipos de estructura, luego detalla la diferencia entre tipos de valor y tipos de referencia, y finalmente explora los tipos de datos que se pueden poner a cero y los operadores ?

4.1 Sobrecarga de métodos y modificadores de parámetros

Hay cuatro tipos de modificadores de parámetros en C#:

(Ninguno), al pasar un valor.

(ninguno), cuando se pasa un valor, se pasa una copia de los datos a la función. Lo que se copia depende de si el parámetro es un tipo de valor o un tipo de referencia. tipo de valor en sí, y este último copia la Referencia (similar al puntero de C++).

out, parámetro de salida. Si se usa out al declarar el parámetro, también se debe agregar out al llamar. No es necesario asignar valores antes de su uso, pero a los parámetros se les deben asignar valores cuando sale la función; de lo contrario, se producirá un error de compilación.

Los parámetros ref y reference son similares a out. La diferencia es:

El parámetro de salida (out) no es necesario (no es necesario, el valor asignado también se sobrescribirá en reasignaciones posteriores). ) se inicializa antes de la entrega y se le debe asignar un valor al salir;

El parámetro de referencia (ref) se debe inicializar antes de la entrega y su valor se puede (no necesariamente) cambiar al salir.

Como puede ver, la ventaja de los dos métodos anteriores es que solo necesita usar el método una vez para obtener múltiples valores de retorno. ¡Y los métodos ordinarios solo pueden devolver un valor de retorno!

Tenga en cuenta que incluso si declara un parámetro de tipo valor utilizando los dos modificadores anteriores, ¡el valor del parámetro cambiará!

params, matriz de parámetros. Se puede pasar un número variable de argumentos (del mismo tipo) a un método como un único argumento lógico. Es importante enfatizar que una matriz de parámetros declarada de esta manera se puede llamar de dos maneras, ya sea pasando una matriz fuertemente tipada (consistente con cuando se usa una matriz normal como parámetro) o pasando una lista de elementos separados por comas. (este es el único), por ejemplo, el siguiente método:

static double calcularaverage ( int i, parmas double;

Matriz irregular:

Contiene múltiples matrices internas, cada una con su propio límite superior

int[][] a=new int [5][3]

Para obtener información sobre cómo declarar e inicializar estas matrices. los lectores pueden comprobarlo y no entrarán en detalles aquí.

Además, las matrices también se pueden utilizar como parámetros y valores de retorno.

4.3 Enumeraciones

. Una enumeración se utiliza para crear un conjunto de tipos con un nombre simbólico y un valor conocido

Defínelo de la siguiente manera:

enum vacío

{

p>

gerente,

grnut=10,

contratista,

}

Tenga en cuenta que la última coma es opcional ¡Ninguna! De forma predeterminada, si al primer elemento no se le asigna un valor, el valor predeterminado es 0. Si a alguno de los elementos no se le asigna un valor, el valor predeterminado es el valor del miembro anterior más 1. Puede Se infiere que los valores no tienen que ser consecutivos ni únicos, no hay límite.

Por defecto, el tipo de almacenamiento del valor de enumeración es int. puede usar dos puntos para configurarlo

Uso:

enum vacíotipo:byte

enum vacíotipo:byte

Así es como se hace. use valores de enumeración p>{

manager,

grnut=10,

contratista,

} //Puedes; use un punto y coma al final

El acceso a los miembros de la enumeración es implícito Públicamente.

Cuando se utiliza una enumeración, generalmente solo necesita usar el operador de punto para acceder directamente al nombre del símbolo u obtener el valor entero correspondiente según el nombre del símbolo (esto requiere conversión), por ejemplo:

10 {

11 a = 2;

12 }

13 prueba de vacío estático (int a)

p>

10 {

10 p>

10 {

11 a = 2; 12 }

12

13 prueba nula estática (ref int a)

14 {

15 a = 2; >

16 }

Pasar por valor y pasar por referencia tiene otro efecto:

Cuando pasas un tipo de referencia (como una persona) por valor, por ejemplo:

envío vacío estático(persona p)

{

p.age=99;/

p=nueva persona("lee" ,99);/ / Esto no es válido y no afecta el apuntamiento de los parámetros reales

}

Al pasar un tipo de referencia (como una persona) por referencia, por ejemplo :

envío vacío estático (ref persona p)

{

p.age=99;// Esto es válido

p =new person("lee" ,99);// Esto es válido, el puntero al parámetro real cambiará

}

El primero es similar en que p es una constante puntero, que permite el acceso y modificación del mismo. Apunta al contenido del objeto, pero no permite cambiar a qué apunta (nuevo).

Este último es similar a un puntero mutable en el sentido de que puedes acceder y modificar el objeto al que apunta, pero también puedes cambiar lo que apunta para que redirija a otro objeto.

¡Muchos libros no cubren esta distinción!

Un breve resumen de algunas de las diferencias que faltan entre los tipos de valor y los tipos de referencia:

El primero no se puede heredar, pero el segundo sí lo proporciona el constructor predeterminado del primero; el sistema y el usuario No se puede personalizar un constructor sin parámetros, lo cual ciertamente es posible.

4.6 Tipos Zeroable

Los tipos Zerotable fueron admitidos cuando se lanzó .NET 2.0. Es un valor que puede representar todos los tipos primitivos más nulo. Para definir un tipo de variable que acepta valores NULL, agregue a la declaración un signo de interrogación (?) después del tipo de datos subyacente.

Tenga en cuenta que este tipo solo se aplica a tipos de valor y es ilegal definir un tipo de referencia que acepte valores NULL (el tipo de referencia en sí puede ser nulo). Método de definición:

int? a=10;

int?[] b=new int?[5];

Nullable c=10 ;

public int? getsomething()

{

}

Nota: La notación de sufijo ? se utiliza para crear un sistema genérico. .nullable.

Puedes usar hasvalue o ! = operador para determinar si anulable está vacío.

Para este tipo que acepta valores NULL, el valor se puede obtener a través del atributo de valor o directamente (puede ser nulo).

Finalmente, cuando el valor obtenido está vacío, puede usar el operador ? para asignar un valor al tipo. Esto es equivalente a una declaración de determinación, asignando un valor cuando el valor está vacío e ignorándolo. cuando el valor no está vacío. Por ejemplo:

int? a=dr.getsomtthing()?100

Si el valor de retorno de dr.getsomtthing() es nulo, asigne 100 a a; de lo contrario, dr.getsomtthing() El valor de retorno de () se asigna a a.

Similar a las siguientes declaraciones:

1 int? a;

2 if (dr.getsomtthing() is Nullable)//faltaba un paréntesis antes (, ¡gracias de nuevo a redjackwong!

3 {

4 a=dr.getsomtthing();

5 }

6 else

7 {

8 a=100;

9 }

En cuanto al rendimiento, el verdadero poder de las enumeraciones en C# es Se crean instancias detrás de escena de las estructuras derivadas de la clase base System.Enum. Esto significa que se pueden llamar a sus métodos para realizar tareas útiles. Tenga en cuenta que, debido a la forma en que se implementa .NET Framework, no trata sintácticamente las enumeraciones como estructuras. De hecho, una vez que se compila el código, la enumeración se convertirá en un tipo primitivo, similar a int y float. En este caso. , el valor dado debe convertirse de acuerdo con algunas reglas de conversión. Las reglas específicas son las siguientes:

Si un número entero no tiene sufijo, entonces su tipo es el primer tipo que puede representarlo. valor entre los siguientes tipos: int, uint, long, ulong Los tipos literales también se pueden especificar usando sufijos de acuerdo con las siguientes reglas:

Si se usa L o l, el tamaño del número entero determina si se usa. es de tipo largo o ulong (

Tenga en cuenta que la letra minúscula "l" también se puede utilizar como sufijo. Sin embargo, la letra "l" se puede confundir fácilmente con el número "1", lo que da como resultado una advertencia del compilador. Para mayor claridad, use "L"). Si usa U o u, puede determinar si el tipo de entero es uint o ulong según el tamaño del entero. >Si usa UL, ul, Ul, uL, LU, lu, Lu o, entonces el tipo de número entero es ulong

.