Usuario:


Estructura

Storyboard

>Modelo

ID:(1290, 0)



Main

Concepto

>Top


La estructura básica de un programa C# tiene la estructura

```

using System;

namespace ExampleApplication {

class Example {

static void Main(string[] args) {

/* codigo */

}

}

}

```

El archivo tiene una extensión cs (C sharp), ejemplo example.cs .

En detalle:

Al inicio se listan los namespaces que debe ser incluidos:

```

using System;

```

Los namespaces corresponden a grupos de clases.

En segundo lugar se define el namespace del programa mediante:

```

namespace ExampleApplication {

```

y luego se incluye el nombre de la clase mediante

```

class Example {

```

Finalmente se incluye dentro de la clase el programa main:

```

static void Main(string[] args) {

/* codigo */

}

```

ID:(9887, 0)



Namespace

Concepto

>Top


El namespace agrupa distintas clases como por ejemplo

```

using System;

namespace ExampleApplication {

class ExampleClass {

// member variables

/* Variablen definition */

public void FirstMethod() {

/* Code */

}

public double SecondMethod() {

/* Code */

}

}

class ExecuteExampleClass {

static void Main(string[] args) {

ExampleClass p = new ExampleClass();

p.FirstMethod();

}

}

}

```

En el ejemplo se incluye la creación de un objeto:

```

ExampleClass p = new ExampleClass();

```

y la llamada de un método:

```

p.FirstMethod();

```

ID:(9888, 0)



Tipos de variables

Concepto

>Top


Las variables pueden tener algunos de los siguientes formatos:

Tipo | Nombre | Rango | Por defecto

-------|------------|-----------|----------------

bool | Boolean value | True o False | False

byte | 8-bit unsigned integer | 0 a 255 | 0

char | 16-bit Unicode character | U +0000 a U +ffff | '\0'

decimal | 128-bit precise decimal values with 28-29 significant digits | -7.9x1028 to 7.9x1028)/100 a 28 | 0.0M

double | 64-bit double-precision floating point | (+/-)5.0 x 10-324 to (+/-)1.7 x 10308 | 0.0D

float | 32-bit single-precision floating point | -3.4 x 1038 a + 3.4 x 1038 | 0.0F

int | 32-bit signed integer | -2\times 10^9 a 2\times 10^9 | 0

long | 64-bit signed integer | -9\times 10^18 a 9\times 10^18 | 0L

sbyte | 8-bit signed integer | -128 a 127 | 0

short | 16-bit signed integer | -32,768 a 32,767 | 0

uint | 32-bit unsigned integer | 0 a 4,294,967,295 | 0

ulong | 64-bit unsigned integer | 0 a 10^19 | 0

ushort | 16-bit unsigned integer | 0 a 65,535 | 0

ID:(9889, 0)



Definición de variables

Concepto

>Top


Definición de variable

La definición de las variables se realizan con el nombre del tipo y el de la variable terminado por un punto coma (termino de linea):

```

tipo nombre;

```

Ejemplo

```

int n;

double x;

```

Definición de variables y asignación de valores

La definición también se puede combinar con la asignación de valores:

```

tipo nombre = valor;

```

Ejemplo

```

int n = 1;

double x = 2.5;

```

Definición de multiples variables

De igual forma se puede emplear el método de una lista cuando hay varias variables del mismo tipo.

```

tipo nombre_1, nombre_2, nombre_3;

```

Ejemplo

```

int n, m, k;

double x, y, z;

```

Inclusión de comentarios

Por ultimo se puede y recomienda incluir en la misma linea un comentario que explica el significado de la variable:

```

tipo nombre; /* comentario */

```

ID:(9890, 0)



Constantes

Concepto

>Top


Se pueden definir parámetros que no se modifican durante la ejecución del programa y que por ello se definen como constantes. El formato es similar al de la declaración de una variable pero se antepone la palabra 'const':

```

const formato variable = valor;

```

Ejemplo

```

const int n = 1;

const double x=2.5;

```

ID:(9892, 0)



Estructuras

Concepto

>Top


Definición

Las estructuras son colecciones de variables que se crea mediante:

```

public class structure

{

public type field1 { get; set; }

public type field2 { get; set; }

}

```

Ejemplos

```

public class ListItem

{

public String Value { get; set; }

public String Label { get; set; }

}

```

Creación de un puntero

La creación se define mediante

```

structure name = new structure();

```

Ejemplos

```

ListItem datos = new ListItem();

```

Creación de puntero y asignación de datos

Los valores pueden ser definidos en la misma creación

```

structure list = new structure() { field1 = value, field2 = value };

```

Ejemplos

```

ListItem list = new ListItem() { Label = 'id', Value = '0' };

```

Agregar datos

También se pueden agregar datos después de la creación mediante un Add

```

list.Add(new structure() { field1 = value, field2 = value });

```

Ejemplos

```

list.Add(new ListItem() { Label = 'id', Value = '0' });

```

Asignar datos

También se pueden asignar datos específicos (después de que fue creado)

```

list.field1 = value;

```

Ejemplos

```

list.Label = 'id';

```

ID:(9905, 0)



Conversión de formatos

Concepto

>Top


Existen dos formas de convertir formatos, la explicita y la implicita.

En la explicita simplemente se ante pone el nuevo tipo a la variable:

```

variable_nuevo_tipo = (tipo)variable_original;

```

Ejemplo

```

int n;

double x=2.5;

n = (int)x;

```

En la forma implícita se empela un operador que se aplica con la notación:

```

variable_nuevo_tipo = variable_original.operador;

```

Los operadores son

Operador | Formato origen | Formato resultado

-------------|-------------------

ToBoolean | cualquiera | Boolean

ToByte | cualquiera | byte

ToChar | cualquiera | Unicode character

ToDateTime | integer o string | date-time structures

ToDecimal | floating point or integer | decimal

ToDouble | cualquiera | double

ToInt16 | cualquiera | 16-bit integer

ToInt32 | cualquiera | 32-bit integer

ToInt64 | cualquiera | 64-bit integer

ToSbyte | cualquiera | signed byte

ToSingle | cualquiera | small floating point number

ToString | cualquiera | string

ToUInt16 | cualquiera | unsigned int

ToUInt32 | cualquiera | unsigned long type

ToUInt64 | cualquiera | unsigned big integer

Bajo 'cualquiera' se entiende una variable cuyo valor es posible de ser interpretado según la conversión que se esta realizando.

Ejemplo:

```

int n;

double x=2.5;

n = x.toInt16;

```

ID:(9891, 0)



Operadores

Concepto

>Top


Existen distintos operadores. En particular existen:

Operadores aritméticos

Operador | Descripción | Ejemplo (A=10, B=20)

:-----------: | ---------------- | :----------:

+ | Suma dos operadores | A + B = 30

- | Resta el segundo operando del primer | A - B = -10

* | Multiplica ambos operadores | A * B = 200

/ | Divide el numerador por el de-numerador | B / A = 2

% | El operador de módulo que retorna el modulo de base A de B | B % A = 0

++ | El operador de incremento incrementa el valor entero en uno | A++ = 11

-- | El operador de disminución disminuye el valor entero en uno | A-- = 9

Operadores relacionadores

Operador | Descripción | Ejemplo

:------------:|-----------------|:-----------:

== | Comprueba si los valores de dos operadores son iguales o no, si es así, entonces la condición se cumple. | (A == B) is true

!= | Comprueba si los valores de dos operadores son iguales o no, si los valores no son iguales, la condición se vuelve verdadera. | (A != B) is true

> | Comprueba si el valor del operando izquierdo es mayor que el valor del operando derecho, si es así, entonces la condición se vuelve verdadera. | (A> B) is true

< | Comprueba si el valor del operando izquierdo es menor que el valor del operando derecho, si es así, entonces la condición se vuelve verdadera. | (A

>= | Comprueba si el valor del operando izquierdo es mayor o igual que el valor del operando derecho, si es así, entonces la condición se vuelve verdadera. | (A >= B) is true

<= | Comprueba si el valor del operando izquierdo es menor o igual que el valor del operando derecho, si es así, entonces la condición se vuelve verdadera. | (A <= B) is true

Operadores lógicos

Operador | Descripción | Ejemplo

:------------:|-----------------|:-----------:

&& | Llamado operador lógico AND. Si ambos operadores son distintos de cero, la condición se cumple. | (A && B) is true

`||` | Llamado lógico o operador. Si alguno de los dos operadores es distinto de cero, la condición se cumple. | (A `||` B) is true

! | Llamado operador lógico NO. Se utiliza para invertir el estado lógico de su operando. Si una condición es verdadera, entonces el operador lógico NO lo hará falso. | !(A && B) is true

Operadores sobre bits

Con las variables A = 0011 1100 y B = 0000 1101 se tiene:

Operador | Descripción | Ejemplo

:------------:|-----------------|:-----------:

& | El operador binario AND copia un poco al resultado si existe en ambos operadores. | (A y B) = 12, que es 0000 1100

`|` | El operador binario OR copia un poco si existe en cualquiera de los operadores. | (A `|` B) = 61, que es 0011 1101

^ | El operador binario XOR copia el bit si está configurado en un operando pero no en ambos. | (A ^ B) = 49, que es 0011 0001

~ | El operador binario complementario es unitario y tiene el efecto de 'voltear' los bits. | (~ A) = 61, que es 1100 0011

<< | Operador de cambio binario a la izquierda. El valor de los operadores de la izquierda se mueve hacia la izquierda por el número de bits especificado por el operando de la derecha. | A << 2 = 240, que es 1111 0000

>> | Operador de cambio a la derecha binario. El valor de los operadores de la izquierda se mueve a la derecha por el número de bits especificado por el operando de la derecha. | A >> 2 = 15, que es 0000 1111

Operadores de asignación

Operador | Descripción | Ejemplo

:------------:|-----------------|:-----------:

= | Operador de asignación simple, Asigna valores de los operadores del lado derecho al operando del lado izquierdo | C = A + B asigna el valor de A + B a C

+= | Agregar operador de asignación AND, agrega el operando derecho al operando izquierdo y asigna el resultado al operando izquierdo | C + = A es equivalente a C = C + A

-= | Restar Y operador de asignación. Resta el operando derecho del operando izquierdo y asigna el resultado al operando izquierdo | C - = A es equivalente a C = C - A

*= | Multiplica el operador de asignación AND, multiplica el operando derecho con el operando izquierdo y asigna el resultado al operando izquierdo | C* = A es equivalente a C = C* A

/= | Dividir Y asignar operador, divide el operando izquierdo con el operando derecho y asigna el resultado al operando izquierdo | C/ = A es equivalente a C = C / A

%= | Operador de módulo Y asignación. Toma módulo usando dos operadores y asigna el resultado al operando izquierdo | C% = A es equivalente a C = C% A

<<= | Operador de asignación Y de desplazamiento a la izquierda | C << = 2 es igual que C = C << 2

>>= | Desplazar a la derecha Y el operador de asignación | C >> = 2 es igual que C = C >> 2

&= | Operador de asignación AND a nivel de bit | C& = 2 es igual que C = C &2

^= | OR exclusivo a nivel de bit y el operador de asignación | C^= 2 es igual que C = C^2

\|= | OR inclusivo a nivel de bit y el operador de asignación | C\| = 2 es igual que C = C\| 2

Otros operadores

Operador | Descripción | Ejemplo

:------------:|-----------------|:-----------:

sizeof() | Devuelve el tamaño de un tipo de datos. | sizeof(int), devuelve 4.

typeof() | Devuelve el tipo de una clase. | typeof(StreamReader);

& | Devuelve la dirección de una variable. | &a; Devuelve la dirección real de la variable.

* | Puntero a una variable. | *a; crea un puntero llamado 'a' a una variable.

?: | Expresión condicional | ¿Si la condición es verdadera? Entonces valor X: de lo contrario, valor Y

is | Determina si un objeto es de un tipo determinado. | If(Ford is Car) // comprueba si Ford es un objeto de la clase Car.

as | Reparto sin levantar una excepción si el reparto falla. | Objeto obj = new StringReader ('Hello'); StringReader r = obj como StringReader;

ID:(9893, 0)



Decisiones

Concepto

>Top


Para controlar el desarrollo se pueden usar las decisiones como ámbitos o casos.

En el caso de las decisiones como ámbitos se tienen el comando if, en particular

if simple

En este caso se usa una condición lógica (condition) y según esta se procesa o no el correspondiente código:

```

if(condition){

/* code */

}

```

if else

En forma similar se puede procesar alternativamente dos códigos con

```

if(condition){

/* code condition = true */

} else {

/* code condition = false */

}

```

En forma análoga se pueden tener múltiples condiciones y códigos:

```

if(condition_1){

/* code condition_1 = true */

} else if(condition_2){{

/* code condition_1 = false and condition_2 = true */

} else {

/* code condition_1 and condition_2 = false */

}

```

Otro método en que se direcciona a casos específicos es el select.

El formato básico tiene la forma:

```

switch (caseSwitch)

{

case 1:

/* code case 1 */

break;

case 2:

/* code case 2 */

break;

default:

/* code default */

break;

}

```

en que los casos están enumerados.

ID:(9894, 0)



Loop

Concepto

>Top


Para realizar multiples operaciones se tienen los comandos while y for.

while

Los comandos while y do while repiten una acción hasta que se cumple una condición. En el caso while el control es antes de la ejecución del código

```

while( condition){

/* code */

}

```

y en el do while después del código:

do while

```

do{

/* code */

} while( condition);

```

for

En el caso del for el proceso se ejecuta un numero definido de operaciones las que son contabilizadas por el indice de la función for:

```

for (initializer; condition; iterator){

/* code */

}

```

El initializer define un entero y le asigna el valor inicial

```

int i = 0;

```

La condition se define como una relación lógica que incluye el contador definido en el initializer, como por ejemplo

```

i < 5

```

El iterator indica como modifica el contador, esto es incrementar o reducir:

```

i++ o i--

```

foreach

Existe otra variante for en que se recorre un arreglo. En ese caso se define como

```

var lista = new List { elementos };

foreach (int contador in lista)

{

/* code */

}

```

ID:(9895, 0)



Arreglos 1D

Concepto

>Top


La definición de arreglos se realiza agregando los paréntesis rectangulares después del tipo de formato:

```

tipo[] nombre_variable;

```

Ejemplos

```

int[] arreglo_enteros;

double[] arreglo_valores;

```

La definición solo crea el puntero y no el espacio para definir los elementos del arreglo. Para crear el arreglo es necesario incluir el comando 'new' y el tamaño del arreglo

```

tipo[] nombre_variable = new tipo[numero];

```

Ejemplos

```

int[] arreglo_enteros = new int[10];

double[] arreglo_valores = double[20];

```

De igual forma se pueden crear los arreglos definiendo valores

```

tipo[] nombre_variable = { lista };

```

Ejemplos

```

int[] arreglo_enteros = { 1, 1, 2, 4, -2 };

double[] arreglo_valores = { 2.5, 1.6, -1.5 };

```

Los elementos se indican con el numero del contador entre corchetes rectangulares

```

arreglo_enteros[contador] = valor;

```

Ejemplos

```

arreglo_enteros[2] = 0;

arreglo_valores[0] = 1.2;

```

ID:(9896, 0)



Arreglos nD

Concepto

>Top


La definición de arreglos se realiza agregando los paréntesis rectangulares con comas para indicar el número de variables después del tipo de formato:

```

tipo[,] nombre_variable;

```

Ejemplos

```

int[,] arreglo_enteros;

double[,,] arreglo_valores;

```

La definición solo crea el puntero y no el espacio para definir los elementos del arreglo. Para crear el arreglo es necesario incluir el comando 'new' y el tamaño del arreglo

```

tipo[] nombre_variable = new tipo[dimension_1,dimension_2];

```

Ejemplos

```

int[,] arreglo_enteros = new int[10,20];

double[,,] arreglo_valores = double[20,30,40];

```

De igual forma se pueden crear los arreglos definiendo valores

```

tipo[] nombre_variable = { listas };

```

Ejemplos

```

int[,] arreglo_enteros = new int [2,3] { {1, 1, 2}, {2, 4, 0} };

```

Los elementos se indican con el numero del contador entre corchetes rectangulares

```

arreglo_enteros[contador_1,contador_2] = valor;

```

Ejemplos

```

arreglo_enteros[2,1] = 0;

arreglo_valores[0,2,1] = 1.2;

```

ID:(9898, 0)



Paso de arreglos en argumentos

Concepto

>Top


Los arreglos pueden ser parte de los argumentos de las funciones indicando el formato en el argumento:

```

public type function_name(type[] arr) {

/* code */

return value;

};

```

Ejemplos

```

public int functionName(int[] arreglo) {

/* code */

return value;

};

```

ID:(9897, 0)



Arreglos de estructuras 1D

Concepto

>Top


En forma mas general se puede definir una estructura de un arreglo de estructura:

```

public class ListResponse

{

public List Items { get; set; }

}

```

en que la estructura de cada elemento es

```

public class ListItem

{

public String Value { get; set; }

public String Label { get; set; }

}

```

En este caso primero se cera el puntero a la estructura general

```

ListResponse response = new ListResponse();

response.Items = new List();

```

y luego se agregan elementos mediante el método Add

```

response.Items.Add(new ListItem()

{

Label = stitle,

Value = skey

});

```

ID:(9904, 0)