// Sensor.cs
// version 1.0
// fecha: 7-Enero-2003
// Juan Manuel Cueva Lovelle
// Ejemplo de clases abstractas

#define DEPURACION

using System;

namespace ClasesAbstractas
{
    /// <summary>
    /// Sensor es una clase abstracta
    /// No se pueden crear objetos de una clase abstracta
    /// </summary>
    abstract class Sensor
    {
        protected bool estado=false;
        protected float medida;

        /// <summary>
        /// Propiedad abstracta MedidaUSA
        /// </summary>
        public abstract float MedidaUSA
        {
            get;
        }

        public abstract void Encender();
        public abstract void Apagar();
        public abstract void Visualizar();

    }
    class Termometro:Sensor
    {
        public Termometro()
        {
            estado=false;
            #if DEPURACION
                Console.WriteLine("Se ha creado un Termómetro");
            #endif

        }
        /// <summary>
        /// Devuelve la temperatura en grados Fahrenheit
        /// </summary>
        public override float MedidaUSA
        {
            get
            {
                return (float)((medida*9.0/5.0)+32.0);
            }
        }

        public override void Visualizar()
        {
            if (estado) Console.WriteLine("Temperatura: {0:F2} grados Celsius",medida);
              else Console.WriteLine("Termómetro apagado");
        }
        public override void Encender()
        {
            estado=true;
            Random aleatorio = new Random(); //Se inializa el generador de números aleatorios
            medida=(float)aleatorio.Next(-45,45);//Devuelve un número aleatorio en el intervalo
        }


        public override void Apagar()
        {
            estado=false;
        }

        /// <summary>
        /// Punto de entrada principal de la aplicación.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            // Sensor s = new Sensor(); Error no se puede crear una instancia de una clase abstracta

            Termometro t = new Termometro();
            t.Encender();
            t.Visualizar();
            Console.WriteLine("Temperatura: {0:F2} grados Fahrenheit",t.MedidaUSA);
            t.Apagar();
            t.Visualizar();

            //Espera una tecla
            Console.ReadLine();
        }
    }
}