Fundamentos de Programación Orientada a Objetos en C# .NETEjemplos con aplicaciones visuales y de consola
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 1
COMPILACIÓN CONDICIONAL
2
1
2
Fundamentos de Programación Orientada a Objetos en C# .NETEjemplos con aplicaciones visuales y de consola
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 2
3
Preguntas detonadoras
�¿Qué es y para qué sirve la compilacióncondicional?
�¿Cuándo se recomienda utilizarla?
�¿Qué son las directivas depreprocesamiento?
�¿Cuáles son las directivas deprepropcesamiento?
�¿Cómo se implementa la compilacióncondicional en un proyecto de C#?
Compilación condicional
� Se utiliza para incluir o excluir un segmentode código de un programa fuente.
� Utiliza las directivas de preprocesamiento� #if
� #else
� #endif
� #define
� #undef
� . . .
4
3
4
Fundamentos de Programación Orientada a Objetos en C# .NETEjemplos con aplicaciones visuales y de consola
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 3
Directivas de preprocesamiento
�Ofrecen la posibilidad de omitir seccionesde código de una aplicación.
�Se utilizan para notificar errores y/oadvertencias o simplemente ignorar algúnsegmento de código fuente durante laetapa del análisis léxico de la compilación
5
Directivas de preprocesamiento
6
Directiva Uso
#define, #undef Permiten definir o anular ladefinición de un identificador ouna macro.
#if, #else, #endif Permiten definir o anular seccionesde código fuente de una aplicaciónsegún la definición (o no) delidentificador.
5
6
Fundamentos de Programación Orientada a Objetos en C# .NETEjemplos con aplicaciones visuales y de consola
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 4
Recomendaciones de uso de compilación condicional
�Cuando se está probando una aplicación querequiere demasiados datos de entrada.
�Cuando se desea ejecutar algún método paravalidar cierta operación (en tiempo de diseñode la aplicación).
�Cuando una aplicación requiere datosadicionales a los de entrada durante sudiseño, pero no durante su ejecución.
7
La directiva #define
�Se utiliza para definir un identificador.
�Una vez definido el identificador, elcompilador lo utiliza en cada aparición en elcódigo fuente
�Puede contener una simple definición o unamacro
8
7
8
Fundamentos de Programación Orientada a Objetos en C# .NETEjemplos con aplicaciones visuales y de consola
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 5
Ejemplos de la directiva #define
�#define X�#define Datos�#define GenerarDatosAleatorios
�En C y C++ es posible asignar un valor auna constante a través de #define�Por ejemplo:� #define CantidadAlumnos 28
�En C# ya no se puede asignar un valor9
Las directivas #if, #else, #endif
� Se utilizan para controlar las secciones delcódigo fuente que se desea compilar.
� Funciona de manera semejante al if-else
� La directiva #if define el inicio de una secciónde código y #endif indica el cierre.
�Deben coincidir las directivas #if y #endif
10
9
10
Fundamentos de Programación Orientada a Objetos en C# .NETEjemplos con aplicaciones visuales y de consola
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 6
11
¿Dónde se coloca la directiva #define en aplicaciones de consola?
#define Bandera
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;
namespace Circunferencia{
class Program{
static void Main(string[] args){
12
Ejemplostatic void Main(string[] args){
double dblRadio;
#if BanderadblRadio = 6.18;
#elseConsole.WriteLine(“Radio de la circunferencia?");dblRadio = double.Parse(Console.ReadLine());
#endif
double dblArea = Math.PI * Math.Pow(dblRadio, 2);
Console.WriteLine("Área = "+dblArea);Console.ReadKey();
}
11
12
Fundamentos de Programación Orientada a Objetos en C# .NETEjemplos con aplicaciones visuales y de consola
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 7
� Si la Bandera está definida (#define Bandera) entonces se ejecuta la inicialización directa del valor de la variable dblRadio y se omite la captura desde el teclado
#if Bandera
dblRadio = 6.18; // Cuando Bandera está activa
#else
Console.WriteLine(“Radio de la circunferencia?");
dblRadio = double.Parse(Console.ReadLine());
#endif
13
Ejemplo (cont.)
Nótese que el código de la directiva #else aparece deshabilitado
� Si se elimina la definición de Bandera (#defineBandera) entonces se omite la inicialización directa del valor de la variable dblRadio y se captura desde el teclado
#if Bandera
dblRadio = 6.18; // Cuando Bandera está activa
#else
Console.WriteLine(“Radio de la circunferencia?");
dblRadio = double.Parse(Console.ReadLine());
#endif
14
Ejemplo (cont.)
Nótese que el código de la directiva #if aparece deshabilitado
13
14
Fundamentos de Programación Orientada a Objetos en C# .NETEjemplos con aplicaciones visuales y de consola
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 8
Generar números aleatorios
�Utilizar la clase Random (ubicada en el namespace System)
Random Numero = new Random();
int x = Numero.Next();
�El método Next( ) genera un númeroaleatorio entre 0 y la constanteInt32.MaxValue ( 2, 147, 483, 647)
15
Generar números aleatorios�Para generar números entre 0 y 5
Random Numero = new Random();
int valor = Numero.Next(6);
�Para generar números entre 1 y 6
Random Numero = new Random();
int valor = Numero.Next(1,7);
16
15
16
Fundamentos de Programación Orientada a Objetos en C# .NETEjemplos con aplicaciones visuales y de consola
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 9
Generar cadenas aleatorias
string cadena = Guid.NewGuid().ToString().Substring(0,Longitud);
17
La variable Longitudrepresenta
el tamaño de la cadena
Ejercicio�Se desean capturar
los datos de 50 empleados� Número: int
� Nombre: string
� Sueldo: double
�Y mostrar los datosdel empleado con el sueldo mayor
18
17
18
Fundamentos de Programación Orientada a Objetos en C# .NETEjemplos con aplicaciones visuales y de consola
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 10
Diseño de la forma
19
Uso de la compilación condicional
�Para evitar capturar los datos de 50empleados, se define una constantemediante la directive #define
�#define GenerarEmpleadosAleatorios
�para generar sus datos de maneraaleatoria
20
19
20
Fundamentos de Programación Orientada a Objetos en C# .NETEjemplos con aplicaciones visuales y de consola
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 11
#define GenerarEmpleadosAleatorios
21
#define GenerarEmpleadosAleatorios
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;
namespace CompilacionCondicional{
public partial class Form1 : Form{
. . .
Definir las propiedades del dataGridView en el Form_Load( )
22
private void Form1_Load(object sender, EventArgs e){// Crear las columnas del dataGridViewdgEmpleados.Columns.Add("Número", "Número");dgEmpleados.Columns.Add("Nombre", "Nombre");dgEmpleados.Columns.Add("Sueldo", "Sueldo");
// Definir el estilo moneda (currency) a la columna del sueldodgEmpleados.Columns["Sueldo"].DefaultCellStyle.Format = "C";
// Definir las propiedades del dataGridViewdgEmpleados.ReadOnly = true;dgEmpleados.AllowUserToAddRows = false;dgEmpleados.AllowUserToDeleteRows = false;dgEmpleados.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.Fill;dgEmpleados.SelectionMode = DataGridViewSelectionMode.FullRowSelect;dgEmpleados.MultiSelect = false;
21
22
Fundamentos de Programación Orientada a Objetos en C# .NETEjemplos con aplicaciones visuales y de consola
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 12
Generar los datos aleatorios en el Form_Load( )
23
#if GenerarEmpleadosAleatorios
// Declaración y creación de un objeto para números aleatoriosRandom rndNumeroAleatorio=new Random();
// Definir una constante para la cantidad de empleadosconst int intCantidadEmpleados = 50;
// Definir una constante para la longitud del nombre del empleadoconst int intLongitudNombre = 25;
// Definir una constante para el sueldo máximo de un empleadoconst int intSueldoMaximo = 100000;. . .
Generar los datos aleatorios en el Form_Load( ) (cont.)
24
for(int i=0; i<intCantidadEmpleados; i++){
// Declaración y creación de un objeto local para cada empleadoEmpleado miEmpleado = new Empleado();
// Generar de manera aleatoria los datos del empleadomiEmpleado.Numero =
rndNumeroAleatorio.Next(intCantidadEmpleados);miEmpleado.Nombre= Guid.NewGuid().ToString().Substring(0,
intLongitudNombre);miEmpleado.Sueldo =
rndNumeroAleatorio.NextDouble()*intSueldoMaximo;
// Mostrar los datos del empleado en el dataGridViewdgEmpleados.Rows.Add(miEmpleado.Numero, miEmpleado.Nombre,
miEmpleado.Sueldo);}#endif
23
24
Fundamentos de Programación Orientada a Objetos en C# .NETEjemplos con aplicaciones visuales y de consola
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 13
Funcionamiento�Si está definida la banderaGenerarEmpleadosAleatorios se llenael dataGridView
�#define GenerarEmpleadosAleatorios
25
Funcionamiento�Si se elimina la banderaGenerarEmpleadosAleatorios, secapturan manualmente los datos
//#define GenerarEmpleadosAleatorios
26
25
26
Fundamentos de Programación Orientada a Objetos en C# .NETEjemplos con aplicaciones visuales y de consola
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 14
Otros títulos del autor
http://www.itnuevolaredo.edu.mx/Takeyas/Libro
Bruno López [email protected]
27