lunes, 8 de febrero de 2010

Preguntas y Solicitudes:

Como comentario a este item puedes dejar cualquier pregunta o solicutud que tengas sobre C#, Con gusto te responderemos lo mas pronto posible...

55 comentarios:

  1. Diferencias entre polimorfismo y sobrecarga

    ResponderBorrar
  2. Mire tocayo cuando usted utiliza polimorfismo lo primero es que usted tiene que tener los métodos que tomaran otras acciones (formas) virtuales para poder ser sobre escritos desde una clase extendida o derivada; como puede ver tambien se necesitará Herencia, ya que desde la clase secundaria que ha heredado de la primaria es que hará las overrides tomando exctamente los mismos métodos virtuales de la clase primaria o base para agregale nuevas funcionalidades. De esta forma tendra un método X que en una clase Base A hace tal cosa y el mismo metodo X en la clase derivada B hace tambien otras cosas. En cuanto a Sobrecarga, es super simple la diferencia ya que cuando usted utiliza sobrecarga simplemente tiene mas de un metodo dentro de una misma clase con un mismo nombre pero que reciben distintos tipos o distintas cantidades de parametros, dentro del cuerpo de estos metodos usted tendrá las funcionalidades que usted desee, hasta las mismas que quiera, solo que al llamar uno de estos metodos, se entenderá a cual usted llama dependiendo de la cantidad o tipos de parametros que mande. Para ejemplos y más detalles puede ver en el Archivo del blog Herencia. Más luego redactare acerca de sobrecargas.

    ResponderBorrar
  3. Lo de polimorfismo es mas un tema conceptual, porque lo que significa es que un objeto X puede, dependiendo del contexto, tomar distintas formas (poli-morfismo) y las sobrecargas se definen como metodos/constructores con el mismo nombre pero con firmas distintas.

    Por ejemplo: El .NET Framework, al momento de compilar, firma los metodos y constructores con un identificador para poder diferenciarlos. Es decir, si tienen el mismo nombre pero diferentes parametros, el identificador es distinto. En el caso del Polimorfismo 1+ metodos son sobrescritos y no necesariamente sobrecargados.

    ResponderBorrar
  4. un metodo static puede llamar solo a otro metodos static

    ResponderBorrar
  5. Los operadores a nivel de bit no se pueden aplicar a tipos bool, float, double o decimal.

    ResponderBorrar
  6. Mira pana, con respecto a tu pregunta de si un metodo static puede solo llamar a otro tambien con el mismo modificador tengo para decirte que si hay reglas utilizando clases y miembros de clases statics, por ejemplo tu no
    puedes hacer referencia a un miembro estático por medio de una instancia. En vez de esto, se debe hacer referencia por medio del nombre de tipo. Algo asi como este ejemplo de clase:

    public class ClaseA
    {
    public struct Estructura
    {
    public static int x = 10;
    }
    }
    Para referirse al miembro estático x, tu deberas utilizar el nombre completo (a menos que sea accesible desde el mismo ámbito) de esta forma:

    ClaseA.Estructura.x

    Nota: Tu no podras utilizar this para hacer referencia a descriptores de acceso de propiedades o métodos static puesto que existe solo una copia del campo porque el mismo es static a diferencia de cuando es una instancia de una clase no static, que contiene una copia independiente de todos los campos de instancia de la misma.

    Si esto responde a tu pregunta avisa o reformula tu pregunta.

    ResponderBorrar
  7. Con respecto a tu segunda pregunta, tengo para decirte que debes reformularle, ya que no comprendo bien a que te refieres, honestamente entiendo un millon de cosas con eso pero no se que exactamente responderte por tanto delimita esa pregunta o especificate mejor. Otra cosa, para tus preguntas utiliza el signo ? el cual es utilizado para formular preguntas...

    ResponderBorrar
  8. @Jonathan Rafael:
    Un metodo static puede llamar solo a otro metodos static?

    Respuesta: Si, se puede. La diferencia entre lo que es "static" y lo que no lo es, es que lo "static" esta siempre instanciado y en memoria, por lo que podemos acceder a metodos y propiedades que ya sean estaticas.

    Dentro de un metodo estatico pueden crearse instancias nuevas de otros objetos y tambien llamar metodos estaticos de otras clases.

    Y como dice JN, no puedes llamar a un metodo estatico de una clase si esa clase ha sido instanciada.

    ResponderBorrar
  9. Hey JN# estoy pranticando y queria saber si con el Miembro Estático puedo definir miembros de un objeto que no son asociados con una instancia de una clase específica

    ResponderBorrar
  10. @mire jaime lo q yo pude inventigar es que La palabra clave static especifica que una variable o función se crea únicamente una vez por cada clase, en lugar de crearse en cada objeto basado en dicha clase. Puede acceder a un miembro de clase estático sin crear una instancia de la clase. Los métodos y propiedades estáticos pueden establecerse en el ámbito público o privado.

    ResponderBorrar
  11. Hola Jaime, lo que preguntas creo que te lo estas respondiendo a la vez, ya que si tu tienes un miembro estatico, entendiendo por miembro "en este caso" un Metodo, dentro de este podras tener el universo que desees de objetos creados por ti, a sabiendas de que un objeto podria ser cualquier tipo en C#(Atributos, Propiedades, etc.). Por ejemplo:

    public static void MiMensaje(string Text,int UsuarioID, string Usuario, DateTime Fecha)
    {
    int ID = UsuarioID;
    string User = Usuario;
    DateTime fecha = Fecha;

    MessageBox.Show("El Usuario: "+ ID +" "+ User +" tiene el siguiente mensaje: " Text + " en fecha "+fecha, "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

    }

    Ese metodo static que se llama MiMensaje es un miembro de una clase y como puedes ver dentro tiene definido varios objetos y no son instanciados desde ninguna clase.

    Repito, debes saber que partimos de la realidad de que todo es un objeto.

    ResponderBorrar
  12. Jaime, he quitado su pregunta sobre conseguir el DVD de Visual Studio ya que eso es un tema que no se puede tratar en este blog ya que usted sabe que ese software tiene derechos reservados, ese tipo de pregunta la puede hacer en la universidad.

    ResponderBorrar
  13. Otra cosa, si usted desea puede descargar las versiones Express las cuales son gratis desde Microsoft. http://www.microsoft.com/express/downloads/

    ResponderBorrar
  14. JN# es algo asi que necesito mas o meno, pero que me elimine la [X] y me deje activo el boton maximizar y el minimizar, porque cuando estoy trabajando con el BorderStyle en NONE no me aparece ni el icono, ni el encabezado de la ventana

    Public Class FRMPrueba

    Private Sub FRMPrueba_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.MaximizeBox = False 'Elimina el Boto Maximizar'
    Me.MinimizeBox = False 'Elimina el Boto Mainimizar'
    End Sub
    End Class

    ResponderBorrar
  15. Lo que quieres hacer es que el formulario no se pueda cerrar por el boton?

    Para cancelar el cerrado solo tienes que cancelar el evento de cerrado. Aqui te dejo en ejemplo:

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
    e.Cancel = true;
    }

    ResponderBorrar
  16. JN# Tengo varios TextBox uno de bajo del otro y quiero saber conque codigo hago que uno no me pase al otro hasta que este este lleno. eso es en Visual Basic.Net

    ResponderBorrar
  17. Sera desplazarse al siguiente con presionar "TAB" ?

    ResponderBorrar
  18. @ Juan Alvares; No es eso lo que quiero sino que no me permita bajar al proximo Textbox sin antes que el primero tenga informacion

    ResponderBorrar
  19. Valida en el evento "Leave" del textbox

    ResponderBorrar
  20. @ Juan Alvares; si, pero quiero saber que codigo poner en ese evento "Leave". si ni es mucha molestia podria hacerme un ejemplo en Visual Basic.Net y que este contenga el boton [X] bloqueado. mi correo es el_clar0@hotmail.com

    ResponderBorrar
  21. Intenta desarrollarlo, es muy simple.

    ResponderBorrar
  22. Hola al claro, veo que lo que quiere es muy simple, si es validar un textbox anterior seria primero que esten todos enabled = false or locked = true y cada vez que llene un textbox en el evento leave pregunta si esta lleno que pase al siguiente y al mismo tiempo lo desbloquee, algo asi creo: if me.textbox1.text.trim() <> "" then
    textbox2.locked = false
    textbox2.focus()

    Espero eso le ayude al claro y como dice Juan eso es bien simple.

    ResponderBorrar
  23. Hello Claro, tu solicitud es simple, te ayudaré a que la desarrolles de la forma más práctica.

    Teniendo en cuenta que tienes n TexBox en tu WindowsForm

    1) En el evento Load del WinForm activaremos el KeyPreview para aprovechar la tecla enter:
    Me.KeyPreview = True

    2) En el evento KeyPress del WinForm:
    If (e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter)) Then
    Me.SelectNextControl(ActiveControl, True, True, True, True)
    End If

    3) Para cada TextBox a partir del segundo en adelante, en su evento Enter
    Private Sub TextBox2_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.Enter
    If (Me.TextBox1.Text.Trim() = String.Empty) Then
    Me.TextBox1.Focus()
    End If
    End Sub

    Private Sub TextBox3_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.Enter
    If (Me.TextBox2.Text.Trim() = String.Empty) Then
    Me.TextBox2.Focus()
    End If
    End Sub

    Private Sub TextBox4_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.Enter
    If (Me.TextBox3.Text.Trim() = String.Empty) Then
    Me.TextBox3.Focus()
    End If
    End Sub

    .... o sea, en el evento Enter del TextBox2 validas el anterior TextBox1; en el evento Enter del TextBox3 validas el anterior TextBox2; ... y la validación consiste en determinar si el TextBox anterior está clear..

    ResponderBorrar
  24. @ Aybar Gracias por el codigo exactamente era eso lo que buscaba y a Juan Alvarez de esa forma me funciona, pero no queria los textBox me apareciera bloqueado. pero de todos modos gracias

    ResponderBorrar
  25. JN# se puede hacer a travez de codigo una aplicacion que apartir de la primera vez que sea ejecutada se me bloque en un determinado momento (cuando yo quiera).

    esi lo que quiero es hacer un programa version DEMO, que cuando cumpla una fecha limite se bloque y me salgo un mensaje.

    ResponderBorrar
  26. Pues por supuesto que si, si mal no recuerdo creo que ha aproximadamenteeeeee: un millón de formas de hacer una demo. Las mas comunes son las que se controlan por fechas, otras las controlan por cantidad de registros en una u otra tabla determinada, otras por cantidades de entradas al sistema, etc, etc.

    ResponderBorrar
  27. @ JN# cual seria el mas recomendado y cual seria el codigo mas simple.

    ResponderBorrar
  28. Usa el mas comun caballero

    Por ejemplo: si la fecha actual es mayor o igual a la fecha de vencimiento, muestra mensaje DEMO vencida de lo contrario abre aplicacion.

    ResponderBorrar
  29. @ Anónimo, El que me interesa a mi es el que me valide desde la primera entrada al sistema hasta un periodo de 30 dias, esi esta asu alcance porner el codigo.

    ResponderBorrar
  30. @El Claro, Como lo harias? Que tienes en mente?

    ResponderBorrar
  31. Buenos días Claro... si quieres validar que tu demo funcione hasta 30 días posteriores a su instalación....

    Tienes que tener en cuenta que tu aplicación debe escribir la fecha en la que inició sus funciones o un deadline, ya sea en un Key del registro de Windows, en una tabla de tu DB (si se conecta a una DB) o si lo licencias con una entidad de Licenciamiento (esta es de paga $$)... sin importar el esquema que uses para validar las fechas debes crear un algoritmo que sea capaz de controlar los fraudes (si tú vas a controlar esto), tales como si el usuario atrasa el calendrio del sistema... si lo aumenta... y cosas por el estilo....

    ResponderBorrar
  32. @ Juan Alvarez, Private Sub Demo()
    On Error GoTo Demo_Error
    With Adodc1
    .ConnectionString = ConexionBDatos
    .CursorType = adOpenStatic
    .CommandType = adCmdTable
    .RecordSource = "PARAMETROS"
    .Refresh
    End With

    If Control.Text = "0" Then
    Adodc1.Recordset!Control = "2"
    Adodc1.Recordset!FechaInstal = Date
    Adodc1.Recordset.Update
    End If

    If Control.Text = "0" Or "2" Then
    Call CalcDiasDemo
    Else
    If WControl = "8" Then
    Mensaje.Visible = True
    Mensaje.Text = LoadResString(1915) '"El período de vigencia de
    la versión 'DEMO' ha expirado."
    End If

    If WControl = "9" Then
    Mensaje.Visible = True
    Mensaje.Text = LoadResString(1916) '"Versión 'DEMO' bloqueada
    por alteración de funciones."
    End If
    End If

    On Error GoTo 0
    Exit Sub

    Demo_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") Demo de
    Formulario frmDemo"
    End Sub

    ResponderBorrar
  33. @Claro: Nunca y bajo ninguna circunstancia utilices el GoTo, es retornar al pasado. Muchos de los operadores de C# y VB.NET se crearon para evitar eso del GoTo.

    Para el manejo de errores usa el "Try/Catch"

    Por cierto, si esto es "Aprende C#", porque estas en VB.NET?

    ResponderBorrar
  34. JN# mi tocayo como puedo ponerle Ayuda en Linea a formulario (Abrir un Archivo que esta fuera)

    ResponderBorrar
  35. Saludos muchachos estuve viendo sus comentarios y los he quitado por la siguiente razon: el blog que estamos desarrollando poco a poco esta orientado a enseñar a programar en C# pero tambien como los que estamos como moderadores (JN#, Aybar, Fernando y Juan)tenemos cierto experticio en .NET podemos ayudar en otros lenguajes y hasta en SQL Server de ser necesario. Ese tipo de comentario que fue suprimido no es necesario en este espacio el cual esta ideado para enseñar a programar. Jaime y Jonathan, como buenos participantes, deben mantener esta politica aplicada e interactuar como ya ustedes saben que deben hacerlo, nosotros solo queremos ayudarlos, NO otra cosa.

    Sobre la sugerencia que te hace Juan de NO usar go to por lo que se te explica es 100 % válida, usted como estudiante debe captar esa sugerencia y aplicarla y, ese ejemplo que usted hizo o encontro (en VB 6) debe mejorarlo y llevarlo a otro nivel el cual podríamos ayudarle o darle la luz para que lo resuelva. Cualquier sugerencia que haga uno de nosotros siempre será pensando en lo mejor de las ayudas.

    ResponderBorrar
  36. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  37. Saludos ElGordo7030... para invocar archivos parecido al Shell de Windows utilizamos el Método Start de la Clase Process, este método tiene unas 4 ó 5 sobrecargas(no recuerdo) donde una de ellas espera un string con el path del archivo que quieres invocar:

    System.Diagnostics.Process.Start("");

    Además, soporta otros parámetros que te permiten por así decirlo "manipular" la ventana resultante al ejecutar el método Start.

    Finalmente, puedes documentarte ampliamente en MSDN
    http://msdn.microsoft.com/en-us/library/system.diagnostics.aspx

    http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

    ResponderBorrar
  38. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  39. Con respecto a limitar una DEMO: Ayer le explicaba en el curso una forma muy simple de hacerlo, aqui le dare otro ejemplo bien facil que puede implementear

    le dije ayer que en su login del sistema cuando el usuario se loguee por primera vez usted guarda la fecha en la que lo hizo.
    Puede crear un metodo que guarde la fecha actual en su tabla que tenga el campo fecha de vencimiento, para ello puede
    crear un metodo de la siguiente manera:

    Static DateTime FechaVencimiento()
    {
    DateTime MiFecha = new DateTime();
    SqlConnection conexion = new SqlConnection("strindeconexion");
    //Con este comando insertaras la fecha solo la primera vez
    SqlCommand comando1 = new SqlCommand("Insert into Tabla(Fecha) Values (GetDate()) Where Fecha is Null");
    Comando1.CommandType = CommandType.Text;

    //Co este comando traeras la fecha de vencimiento existente en la tabla
    SqlCommand Comando2 = new SqlCommand("Select Fecha + 30 From Tabla"); //30 seria la cantidad de dias habiles
    Comando2.SqlCommandTpe = CommandType.Text;

    Try
    {
    conexion.Open();
    comando1.ExecuteNonQuery();
    MiFecha = DateTime.Parse(Comando2.ExecuteScalar()); //O (DateTime)Comando2.ExecuteScalar() o Convert.ToDateTime()...
    }
    Catch(SqlException ex)
    {
    string error = ex.Message.ToString();
    }
    Finally
    {
    conexion.close();
    Comando1.Dispose();
    Comando2.Dispose();
    }
    return MiFecha;
    }


    Entonces con ese metodo que lo hace todo, solamente tendria que hacer lo siguiente en el Log In:


    if(DateTime.Now < this.FechaVecmiento.().AddDays(-30))
    {
    MessageBox.Show("Fecha del sistema alterada");
    Application.Exit();
    }
    else if(DateTime.Now >= this.FechaVencimiento())
    {
    MessageBox.Show("Demo vencida");
    Application.Exit();
    }
    else
    {
    //Abra su aplicacion aqui
    }

    ResponderBorrar
  40. Con este mismo principio puede crear otras limitaciones a su Demo, por ejemplo controlar una cantidad de registros en su tabla de clientes o facturas, que si llega a 10 registros la demo dejara de funcionar, etc.

    ResponderBorrar
  41. @ El Gordo, Si lo que quieres que se te abra una ventana que muestre la ayuda, a traves del menú o algun boton:

    tienes que poner un control que se llama "HelpProvider"

    en la propiedad HelpNameSpace del control, le debes decir la ruta de donde se encuntra la Ayuda.

    por ultimo poner este codigo en el evento click del boton o Menu:

    Help.ShowHelp(Me, HelpProvider1.HelpNamespace)

    ResponderBorrar
  42. Hey JN# tengo este codigo en C# Console.ForegroundColor = ConsoleColor.blue;
    y el fondo no se me pone azul, es que lo estoy empleando mal

    ResponderBorrar
  43. @Claro saludos.... medianamente está mal... el compilador desconoce blue... porque dentro del Collection de coleres de ConsoleColor no existe... recuerda que C# es un lenguaje estructurado y distingue Mayúsculas de Minúsculas.... y un poco más allá las propiedades, nombres de clases, identificadores... empiezan con Mayúsculas... otra cosilla... el ForegroundColor es para la Fuente, la propiedad que buscas es BackgroundColor.

    ResponderBorrar
  44. Prueba esto:
    System.Console.BackgroundColor = System.ConsoleColor.Blue;
    System.Console.ForegroundColor = System.ConsoleColor.White;
    System.Console.Clear();
    System.Console.WriteLine("Un ejemplillo para @El Claro");
    System.Console.ReadKey();

    ResponderBorrar
  45. @ Aybar este ejemplo no me hace lo que quiero, lo que busco es que la pantalla completa se me ponga azul, no la parte donde hay texto.

    ResponderBorrar
  46. Para lograr lo que quieres tendras que importar un .dll de windows (kernel32.dll) y llamar el metodo SetConsoleTextAttribute. En la página http://www.c-sharpcorner.com/UploadFile/kashifbilal/ColoringTheConsole12192005015120AM/ColoringTheConsole.aspx explica todo detalladamente. Espero te sirva.

    Saludos,

    ResponderBorrar
  47. La forma mas simple de cambiar el color del background completo es la siguiente: right click sobre la barra de titulo, luego properties. Luego teniendo la opcion Screen Background seleccionada escoge el color azul que quiere. Por ultimo cuando le de OK le sandran dos opciones, seleccionara la que dice: Save properties for future windows with same title.
    Esto es otra forma de resolver tu problema.

    ResponderBorrar
  48. Cuando hablo de barra de titulo me estoy refiriendo a la CONSOLA, es decir cuando usted corra su programa de CONSOLA es que hara los pasos antes dados. Una vez hecho eso siempre su consola lucira con los colores especificados.

    ResponderBorrar
  49. @Claro... debe verifcar la instalación de la Versión del Visual Studio que usa.... deme su correo para enviarle un demo con el ejemplo que le suministré... el mio es aybarpedro@hotmail.com

    ResponderBorrar
  50. Comparto un pequeño código que tuve que hacer hoy para hacer copias de objetos que son referencias y poder modificar las copias sin afectar los objetos originales. Este código solo es aplicable si el objeto que se desea copiar es serializable. Anexo la clase y un programa pueda para quien pueda interesar. Salu2.

    NOTA: lo subo en dos partes porque no cabe todo en un solo comentario

    Primera parte:

    [Serializable]
    public class Duplicable<T>
    {
    /// <summary>
    /// Duplica el objeto y devuelve una nueva instancia del mismo.
    /// </summary>
    /// <returns>Duplicado del objeto.</returns>
    public T Duplicar()
    {
    //Se crea un objeto serializador en formato binario.
    BinaryFormatter bf = new BinaryFormatter();

    //Se crea un memory stream el cual alojará el objeto serializado.
    MemoryStream ms = new MemoryStream();

    //Se serializa el objeto.
    bf.Serialize(ms, this);

    //Se ajusta la posición del stream al inicio para poder deserializar el objeto.
    ms.Seek(0, SeekOrigin.Begin);

    //Se devuelve el objeto deserializado lo que obliga a crear una nueva instancia del mismo.
    return (T)bf.Deserialize(ms);
    }

    /// <summary>
    /// Duplica el objeto que se pasa como parametro y devuelve una nueva instancia del mismo.
    /// </summary>
    /// <param name="objeto">Objeto a duplicar.</param>
    /// <returns>Duplicado del objeto.</returns>
    public static T Duplicar(T objeto)
    {
    //Se crea un objeto serializador en formato binario.
    BinaryFormatter bf = new BinaryFormatter();

    //Se crea un memory stream el cual alojará el objeto serializado.
    MemoryStream ms = new MemoryStream();

    //Se serializa el objeto.
    bf.Serialize(ms, objeto);

    //Se ajusta la posición del stream al inicio para poder deserializar el objeto.
    ms.Seek(0, SeekOrigin.Begin);

    //Se devuelve el objeto deserializado lo que obliga a crear una nueva instancia del mismo.
    return (T)bf.Deserialize(ms);
    }
    }

    ResponderBorrar
  51. Segunda parte:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Globalization;
    using System.Threading;
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;

    namespace TestProgram
    {
    class Program
    {
    static void Main(string[] args)
    {
    //Ajusto la cultura a España para que las fechas se lean correctamente ("MM-dd-yyyy HH:mm:ss")
    Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("es-ES");
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("es-ES");

    //Se crea y se imprime el objeto base para realizar la copia
    Persona p1 = new Persona("Fernando", "Alvarez", DateTime.Parse("02/09/1985"));
    Console.WriteLine("La persona original es:\n");
    p1.Imprimir();

    //Se copia el objeto base y se vuelve a imprimir en pantalla
    Persona p2 = p1.Duplicar();
    Console.WriteLine("La persona copia es:\n");
    p2.Imprimir();

    //Se crea otro objeto persona igualandolo al objeto base
    Persona p3 = p1;
    Console.WriteLine("La persona referencia es:\n");
    p3.Imprimir();

    //Se modifica el objeto base para ver que el copia no se afecta
    p1.Nombre = "Pedro";
    Console.WriteLine("La persona original se ha cambiado:\n");
    p1.Imprimir();

    //Se indica que al modificar el objeto base, la copia no se afecta ya que no es una referencia
    Console.WriteLine("La persona copia sigue siendo la misma:\n");
    p2.Imprimir();

    //Se indica que al modificar el objeto base, la referencia se ve afectada
    Console.WriteLine("La persona referencia ha cambiado:\n");
    p3.Imprimir();

    //Evita que se cierre la consola
    Console.ReadKey();
    }
    }

    /// <summary>
    /// Clase persona
    /// </summary>
    [Serializable]
    class Persona : Duplicable<Persona>
    {
    private string nombre;
    public string Nombre
    {
    get { return nombre; }
    set { nombre = value; }
    }
    private string apellido;
    public string Apellido
    {
    get { return apellido; }
    set { apellido = value; }
    }
    DateTime fechaNacimiento;
    public int Edad
    {
    get
    {
    //Se calcula la edad a partir de la fecha de nacimiento
    DateTime dFechaActual = DateTime.Now;
    TimeSpan tsEdad = dFechaActual.Subtract(fechaNacimiento);
    DateTime dEdad = DateTime.MinValue + tsEdad;
    return dEdad.Year - 1;
    }
    }

    public Persona() { }
    public Persona(string nombre, string apellido, DateTime fechaNacimiento)
    {
    this.nombre = nombre;
    this.apellido = apellido;
    this.fechaNacimiento = fechaNacimiento;
    }

    public void Imprimir()
    {
    Console.WriteLine("Nombre: " + this.Nombre);
    Console.WriteLine("Apellido: " + this.Apellido);
    Console.WriteLine("Edad: " + this.Edad);
    Console.WriteLine();
    }
    }
    }

    ResponderBorrar
  52. @JN# eoo como esta usted tocayo y esta vacaciones como estan

    ResponderBorrar
  53. me pueden ayudar con este trabajo para el instituto por favor soy novato en esto.
    Ingreso Alumno
    Permitir el ingreso de información relacionada con los alumnos de una institución, es necesario registrar los siguientes datos para cada alumno ingresado:
    Rut
    Nombre
    Apellido
    Edad
    Fecha de Nacimiento
    Sexo
    E-mail
    Fono contacto
    Carrera seleccionada
    La cantidad de alumnos debe ser definida por el usuario una vez requiera utilizar la aplicación, no es necesario completar el ingreso del total de los alumnos para realizar consultas.
    Las consultas a este nivel solo corresponden a consultas básicas ejemplo:
    Cantidad de alumnos matriculados
    Consultas individuales por rut para verificar por ejemplo que exista el alumno o en qué carrera se encuentra inscrito.
    Ingreso Notas
    Además se solicita el ingreso de cuatro notas en total para cada alumno existente en el sistema, todas las notas deben ser ingresadas y el formato corresponde desde el 1.0 al 7.0.

    Consultas
    Con todos los datos de un alumno debemos proveer información estadística para los directores de la institución, información como:
    Cantidad de alumnos mujeres y hombres matriculados. Qué porcentaje representan cada uno.
    Qué carrera cuenta con más mujeres u hombres matriculados.
    Que cantidad de aprobados y reprobados, además el porcentaje que representan.
    Tener alguna relación con la edad por ejemplo por carrera.

    Se solicita proveer una solución para el requerimiento descrito anteriormente.

    Observaciones
    El máximo de ingresos es determinado por el usuario.
    Cada vez que se realice una operación se debe consultar si se desea continuar “Si”para continuar en la opción seleccionada “No” para volver al menú principal.
    Si los arreglos utilizados en el desarrollo no contiene datos, no se debe permitir la opción de visualización o consultas indicándolo en un mensaje.

    ResponderBorrar
  54. Lo sentimos amigo #fabi, Nosotros ayudamos a resolver problemas puntuales como errores, mejores practicas en códigos, etc., pero NO hacemos 'tareas'. Disculpa los inconvenientes por no poder ayudarte en ese sentido. Empieza a hacer tu tarea, y cuando tengas dudas de como hacer algo "puntual" o tengas algún error, etc, entonces nos escribes y con gusto te ayudaremos.

    ResponderBorrar
  55. A desarrollar una aplicación visual que dé solución a un problema en el que esté presente el polimorfismo a partir de la identificación de los métodos virtuas,clases y métodos abstractos presentes en las solucioón del mismo.
    implementar las clases parques, Aparatos , AparatosNinnos y AparatosAdultos.

    ResponderBorrar

Preguntas;Comentarios;Aportes;Criticas Positivas;Recomendaciones.