UTNianos

Versión completa: Aprender C# .NET
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2 3 4
un poco de eventos
No es posible llamar a los métodos almacenados en un campo delegado a través
del mismo
UN RELOJ ELEMENTAL



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace eventos
{//objetos notificadores con un un campo de tipo delegado
//y al ocurrir un suceso particular ejecute los métodos del objeto interesado
//0 al instanciar objeto se ejecuta constructor de notificada
//1. delegado almacena referencia a metodo sin parametros
//2 el evento tick gestionara al delegado manejadordetiempo
//3 la clase notificada crea tiemponotificadora tiempo
//4.usamos al evento para relacionar al delegado con el metodo tiempo_tick
//5 al invocar comenzar() invoca al enento tick() el cual gestiona al metodo //de la
//clase notificada se ejecuta ese metodo


public delegate void manejadordetiempo();
//1
public class tiemponotificadora
{
public void comenzar()
{
if (tick !=null)
{
tick();

}
}
public event manejadordetiempo tick = null;
//2
}
class notificada
{
tiemponotificadora tiempo;
public notificada()
{
tiempo = new tiemponotificadora();
//3
tiempo.tick += new manejadordetiempo(tiempo_tick);
//tiempo.tick += tiempo_tick;
//en 2.0 infiere tipo el compilador automaticamente
//con metodos anonimos delegate(<parámetros>) {<instrucciones>};
//tiempo.tick += new //manejadordetiempo(tiempo_tick){Console.WriteLine("ejecuta metodo
////de clase notificada");}
// //sin necesidad de definir al metodo
//4
tiempo.comenzar();
//5
}

void tiempo_tick()
{
Console.WriteLine("ejecuta metodo tick de clase notificada");
//throw new NotImplementedException();porque logenere con //inteligience
}

static void Main(string[] args)
{
notificada obj = new notificada();
//0
Console.ReadKey();
}
}
}



Carmen, te pido por favor que si podes, pongas tu codigo entre tags de code, es mas facil de leer y te respeta la indentacion.
Otra cosa, trata de evitar los dobles, o en tu caso cuadruples posts. Si tenes que hacer mas de un post seguido, fijate de editar tu post, o esperar a que alguien postee.

Saludos!
al poner codigo entre tags luego demora mucho la apertura de la pagina
feliz año
cpuse tags code en el primer mensaje curso de universidad de laredo
para entender el codigo


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

//numero de anotaciones se establece dinamicamente
//la variable Mis_ Anotaciones es una referencia a un objeto
//y puede usarse como un Arreglo por Indexador


namespace indexador1ojeda
{
class Anotaciones
{
private string[] anotacion;

public Anotaciones(int Elementos)
{
anotacion = new string[Elementos];
}

//definimos al Indexador

public string this[int index]
{
get { return anotacion[index];/* return the specified index here */ }
set { anotacion[index] = value; /* set the specified index to value here */ }
}

public int Elementos { get { return anotacion.GetLength(0);}}

static void Main(string[] args)
{
Anotaciones Mis_Anotaciones;
int Indice;
string Anotacion;


Console.Write("introducir el numero de anotaciones ... ");
Indice = Convert.ToInt32(Console.ReadLine());
Mis_Anotaciones = new Anotaciones(Indice);
Console.WriteLine("INTRODUCE CUALQUIER TEXTO!!! INGRESALO CON ENTER");
for ( Indice = 0; Indice < Mis_Anotaciones.Elementos;Indice ++)
{
Anotacion = Console.ReadLine();
//espera una anotacion y luego enter
Mis_Anotaciones[Indice] = Anotacion;

}
Console.WriteLine("....................................");
Console.WriteLine("anotaciones efectuadas");
for (Indice = 0 ; Indice <Mis_Anotaciones.Elementos; Indice ++)
{
Console.WriteLine(Mis_Anotaciones[Indice]);

}
Console.ReadKey();


}
}
}


Lo de los tags de codigo era una sugerencia nomas. Ya que posteas mucho codigo, de esa manera esta mas legible. Sino de ultima lo podes meter entre tags de spoiler y el codigo solo se carga cuando abris el spoiler.

De todas formas eso fue opcional, lo de los multiples posts no lo es.

Saludos y felices fiestas para vos tambien!
yo no entiendo, estas intentando armar un tutorial en este topic para el que quiera aprender algunas cosas de C# y sql server?
si seria bueno que participaran subiendo y escribiendo codigo
el tutorial de C# esta en el primer mensaje ELEGI EL DE LA UNIVERSIDAD DE LAREDO
es que sin estudiar que es un objeto como se puede comportar como lo podemos utilizar el codigo por si mismo no dice nada no son scripts es programacion orientada a objetos en el caso de un lenguaje como pascal de otra epoca y otro paradigma poder hacer una lista enlazada para realizar lo mismo que hace el programa del pie
seria un bodrio
subo un apunte de microsoft sobre objetos

extraido de cosio C# avanzado con modificacion para usar yield
con tags code sin comentarios



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace ejemploienumerable
{
namespace ejemploienumerable
{
interface IProducto
{
void CalculaImpuesto(double imp);

void MuestraInformacion();

}
class CTelevisor : IProducto
{
double costo;
double impuesto;
string descripcion;
public CTelevisor(string desc, double pcosto)
{
costo = pcosto;
descripcion = desc;
}
public void ColocarCosto(double nCosto)
{
costo = nCosto;
}

public void CalculaImpuesto(double imp)
{

impuesto = costo * imp;

}

public void MuestraInformacion()
{
// Mostramos la informacion necesaria
Console.WriteLine("--- Producto televisor");
Console.WriteLine(descripcion);
Console.WriteLine("Costo {0}, Impuesto {1}", costo, impuesto);
Console.ReadLine();
}

}


class CTiendaTelevisor : IEnumerable
{


private CTelevisor[] televisores;



public CTiendaTelevisor()
{


televisores = new CTelevisor[3];

televisores[0] = new CTelevisor("Televisor LCD", 1500.0);
televisores[1] = new CTelevisor("Televisor Plasma", 1800.50);
televisores[2] = new CTelevisor("Televisor LED", 2500.75);
}


public IEnumerator GetEnumerator()
{
for (int index = 0; index < televisores.Length; index++)
yield return televisores[index];
}




}
class cliente
{
static void Main(string[] args)
{



CTiendaTelevisor miTienda = new CTiendaTelevisor();


foreach (CTelevisor tv in miTienda)
{

tv.CalculaImpuesto(0.16);

tv.MuestraInformacion();
}

}
}


}
}





ELIMINE COMENTARIOS USAR VS. NET PARA VER OBJETOS Y SU RELACIONES POR NO SER PROGRAMACION ESTRUCTURADA NO SE ENTIENDE LA LECTURA LINEAL
Disculpa, esta buena la intencion.

Pero sin los tags, es inleible y nadie le va a dar bola. Un poco de javascript no le hace mal a nadie
(27-12-2012 14:38)gonnza escribió: [ -> ]yo no entiendo, estas intentando armar un tutorial en este topic para el que quiera aprender algunas cosas de C# y sql server?
El Tutorial esta en el mensaje uno es de la universidad de laredo del departamento de sistemas de ellos

edite los codigos en los mensajes que vi que podian llegar a no ser claros
para los que no programaron nunca con C# porque para entenderlos totalmente hay que leer los documentos Y TUTORIAL DE LAREDO O EL GUILLE no hay otra forma de entender esto que estudiar, los conceptos que hay que aprender no son muchos pero no vemos casi nada de esto en la facultad si se pide algo pero cuando te lo piden lo tenes que aprender solo o cosas viejas pascal, c ansi etc etc o en gestion de datos leer por uno mismo de c#y hacer
el tp que es mas me parece muy bien que lo hagan con c# da idea de objetos y es de mucha utilidad para entender programacion pero lo tendriamos que haber visto antes para no andar copiando y pegando codigo de tp viejos
subi en el primer mensaje ahi esta un tutorial de C# elemental

EN ESTE EJEMPLO LA CLASE NOS NOTIFICA CUANDO UN CLIENTE MODIFICO A UN CAMPO
con tags code


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EVENTOSYDELEGADOS
{
class Program
{
public Program()
{
empleados emp = new empleados("ron", 10);
//emp.datoscambiados += new EventHandler(emp_datoscambiados);
//el evento se maneja mediante el metodo
//asignado al delegado
//en este caso el delegado es un miembro de enpleados al igual que el evento datos cambiados
//la referencia al metodo esta encapsulada en el objeto delegado
emp.datoscambiados +=new empleados.Datoscambiadosevenhandler(emp_datoscambiados);

emp.Nombre = "elguille";
}
//metodo asignado al delegado
private void emp_datoscambiados()

{ Console.WriteLine("los datos se cambiaron"); }

static void Main(string[] args)
{
Program p = new Program();

Console.ReadLine();
}
}
class empleados
{
public delegate void Datoscambiadosevenhandler();
//Sintaxis modificador,delegate,tipo de dato ,identificador,lista de parametros
public event Datoscambiadosevenhandler datoscambiados;
private string nombre = string.Empty;
public string Nombre
{
get
{
return nombre;
}
set
{
nombre = value;
//se suelta ,lanza al evento con nombre del evento y parametros del delegado
datoscambiados();
//(this, new EventArgs());
}
}
private int edad = 10;
public int Edad
{
get
{
return edad;
}
set { edad = value; }
}
public empleados (string nombre1,int edad1)
{this.nombre=nombre1;
this.edad=edad1;}
}
}



TAMBIEN
es posible usar a los delegados en como parámetros de métodos para implementar un proceso generico
en c++ se usan punteros a funciones en C# podemos usar delegados con la ventaja que
ahora en C# hay comprobación de tipos por ser objetos derivados de System.Delegate C# cuenta con comprobación de tipos



el parametro del metodo Procesa( solicitadato ...) es de tipo delegado public delegate string solicitadato();
este delegado esta apuntando a una funcion que retorna una cadena entonces con el mismo delegado podremos ejecutar a public static string solicitaconstante() y a public static string solicitateclado()
(tenemos asi al proceso generico) como definimos a los metodos como estaticos no necesitamos una instancia de la clase y la invocacion es asi muy simple con
ProcesaDatos.Procesa(new solicitadato(ProcesaDatos.solicitateclado));
donde (new solicitadato(ProcesaDatos.solicitateclado) es simplemente el parametro de Procesa( solicitadato ...)
tambien en ProcesaDatos.Procesa(new solicitadato(ProcesaDatos.solicitaconstante));
en el cual estemos usando a otro metodo pero todos tienen igual firma

otro ejemplo con tags code


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace delegadoevento0204
{public delegate string solicitadato();
class ProcesaDatos
{ public static string solicitateclado()
{
Console.WriteLine("introduscadato");
return Console.ReadLine();
}
static int contador = -1;
public static string solicitaconstante()
{
string[] valores = { "ENERO", "FEBRERO", "MARZO", "ABRIL" };
contador =(contador ==valores.GetUpperBound(0) ? 0: contador +1);
return valores[contador];
}
public static void Procesa(solicitadato FSolicitud)
{string [] datos=new string[4];
int Indice;
for (Indice = 0; Indice < 4;Indice ++)
//lo llama 4 veces
datos[Indice]=FSolicitud();

for (Indice = 0; Indice < 4; Indice++)
Console.WriteLine(datos[Indice]);
Console.ReadLine();
}


static void Main(string[] args)
{//CREA INSTANCIA EL DELEGADO APUNTANDO AL METODO DESEADO
ProcesaDatos.Procesa(new solicitadato(ProcesaDatos.solicitateclado));
ProcesaDatos.Procesa(new solicitadato(ProcesaDatos.solicitaconstante));
}
}
}




ELIMINE COMENTARIOS USAR VS. NET PARA ENTENDER COMO SE COMUNICAN LOS OBJETOS ESTO NO ES PROGRAMACION ESTRUCTURADA
[Imagen: Jackie-Chan-WTF-meme-face-70958233396.jpeg]


pd. si encontraba una foto mas grande usaba la mas grande.
Al menos indentá! jajaj
algun mod que le ponga los tags por favor

Escribi asi carmen

code = csharp

entre []

te quedaria asi

[kode=csharp] (pero remplaza la "K" por una "C"

despues lo cerras [/Kode]


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EVENTOSYDELEGADOS
{
class Program
{
public Program()
{
empleados emp = new empleados("ron", 10);
//emp.datoscambiados += new EventHandler(emp_datoscambiados);
//el evento se maneja mediante el metodo
//asignado al delegado
//en este caso el delegado es un miembro de enpleados al igual que el evento datos cambiados
//la referencia al metodo esta encapsulada en el objeto delegado
emp.datoscambiados +=new empleados.Datoscambiadosevenhandler(emp_datoscambiados);

emp.Nombre = "elguille";
}
//metodo asignado al delegado
private void emp_datoscambiados()

{ Console.WriteLine("los datos se cambiaron"); }

static void Main(string[] args)
{
Program p = new Program();

Console.ReadLine();
}
}
class empleados
{
public delegate void Datoscambiadosevenhandler();
//Sintaxis modificador,delegate,tipo de dato ,identificador,lista de parametros
public event Datoscambiadosevenhandler datoscambiados;
private string nombre = string.Empty;
public string Nombre
{
get
{
return nombre;
}
set
{
nombre = value;
//se suelta ,lanza al evento con nombre del evento y parametros del delegado
datoscambiados();
//(this, new EventArgs());
}
}
private int edad = 10;
public int Edad
{
get
{
return edad;
}
set { edad = value; }
}
public empleados (string nombre1,int edad1)
{this.nombre=nombre1;
this.edad=edad1;}
}
}


Ponganle un beautifier o algo, que el codigo queda hecho un asquito yuk
ponganle zorras y juegos de azar.
si necesitan eso no entienden nada
ESTO ES PROGRAMACION ORIENTADA A OBJETOS NO PROGRAMACION ESTRUCTURADA
(13-01-2013 12:30)carmen escribió: [ -> ]si necesitan eso no entienden nada

La/El que no entiende nada parece que sos vos =)
Si tanto te cuesta dejar un poco mas comprensible el codigo, te aconsejo que antes de aprender a programar sobre .net o C#, o SQL... tomes un curso acelerado de programacion sobre tarjetas perforadas =)
Páginas: 1 2 3 4
URLs de referencia