Vamos a conocer algunas clases útiles de C#, presentes en cualquier otro lenguaje. Veamos el práctico temporizador con Timer

/**
* Temporizador.cs
* Muestra el uso de la clase Timer para crear temporizadores.
* Se puede asociar un evento a un temporizador para que el programa
* reaccione al cabo de x tiempo.
* Info sobre el standar http://msdn.microsoft.com/net/ecma
*/

using System;
using System.Timers;


// Vamos a usar El timer a través de nuestra clase temporizador
public class Temporizador
{
	private Timer miTimer;

	public Temporizador (int intervalo)
	{
		miTimer = new Timer();

		// Le asociamos un evento
		miTimer.Elapsed += new ElapsedEventHandler( EventoTemporizador );

		// Le asignamos un tiempo
		miTimer.Interval = intervalo;

		// Lo ponemos en marcha
		miTimer.Start();

	 }

	// Este será el evento que se ejecutará al pasar el tiempo
	public static void EventoTemporizador( object objeto, ElapsedEventArgs e )
	{
		System.Console.WriteLine("Salto el temporizador: Campaaana y se acabó");
		//exit(0);
	}


	// Método principal
	public static void Main ()
	{
		// Un  temporizador que salte cada 3 segundos...
		Temporizador temporizador = new Temporizador(3000);
		System.Console.WriteLine("Que paasa");

		// Creamos un bucle infinito y a ver que ocurre
		for(;;);
			// Pues aquí, a verlas venir...

	}
}
 
Vamos a ver algunas funciones matemáticas con Math

/**
* Mates.cs
* Muestra el uso de la clase Math, para las operaciones matemáticas habituales
*/

using System;
using System.Timers;


// La clase Mates
public class Mates
{

	// Método principal
	public static void Main ()
	{
		double valor = 0.0;

		// Vamos a coger un número con comas y a jugar con él
		System.Console.WriteLine("Anda resalao mete un numero con comillas");
		string entrada = System.Console.ReadLine();

		try  // Trata de convertirlo Carlos!!
		{
			valor = Convert.ToDouble(entrada);

			// Vamos a probar el redondeo, su techo y su suelo
			System.Console.WriteLine("Redondeo con Round produce {0}", Math.Round(valor));
			System.Console.WriteLine("Redondeo con Floor produce {0}", Math.Floor(valor));
			System.Console.WriteLine("Redondeo con Ceiling produce {0}", Math.Ceiling(valor));
			System.Console.WriteLine("Su absoluto {0}", Math.Abs(valor));

			// Otras funciones: Log, Max, Min, Pow, Cos, Sin, Tan..

			System.Console.WriteLine("Constantes universales {0} y {1}", Math.PI, Math.E);

		} catch (Exception)
		{
			System.Console.WriteLine("Es probable que no metieras un número válida. Adios.");
		}

		// Si buscas números aleatorios usa Random, no Math
		Random aleatorio = new Random();
		System.Console.WriteLine("A ver un aleatorio: {0}", aleatorio.Next());

	}
}
 
Vamos a ver como manejar el entorno con Environment

/**
* Entorno.cs
* Muestra el uso de la clase Enviroment que nos da información sobre el
* entorno en que se ejecuta el programa. Siendo c# multiplataforma, puede
* ser una clase de gran interés
*/

using System;



// Vamos a conocer el entonno...
public class Entorno
{

	// Método principal
	public static void Main ()
	{
		int i = 0;

		// Vamos a ver..
		System.Console.WriteLine("Vamos a ver que se cuece en el sistema");

		string maquina = "";
		string quienSoy = "";
		string dondeEstoy = "";

		// Sacamos los datos de máquina ///////////////////////////////
		maquina += "Sistema operativo: " + Environment.OSVersion + "
";
		maquina += "Versión: " + Environment.Version + "
";
		maquina += "Hostname: " + Environment.MachineName + "
";
		maquina += "RAM: " + Environment.WorkingSet + "
";

		System.Console.WriteLine("{0}
",maquina);

		// Sacamos nuestro nombre de programa y argumentos //////////////
		quienSoy += "Comando ejecutado: " + Environment.CommandLine + "
";
		// Argumentos usados
		string [] argumentos = Environment.GetCommandLineArgs();
		// Mostramos todos, el primero sera el propio programa
		for (i = 0; i < argumentos.Length; i++)
		{
			quienSoy += String.Format("Arg[{0}]: {1}", i, argumentos[i]) + "
";
		}

		System.Console.WriteLine("{0}
", quienSoy);

		// Sacamos nuestra posicion y las unidades de disco //////////////
	    dondeEstoy += "Directorio actual: " + Environment.CurrentDirectory + "
";
	    dondeEstoy += "Directorio de sistema: " + Environment.SystemDirectory + "
Unidades:
";

		// Sacamos unidades
		string [] unidades = Environment.GetLogicalDrives();
		// Mostramos todos, el primero sera el propio programa
		for (i = 0; i < unidades.Length; i++)
		{
			dondeEstoy += String.Format("Unidad[{0}]: {1}", i, unidades[i]) + "
";
		}

		System.Console.WriteLine("{0}
", dondeEstoy);

		// Variables de entorno, por ejemplo la mitica PATH, basta con ejecutar
		// el comando set en DOS para sacar las variables
		Console.WriteLine("
Path: {0}", Environment.GetEnvironmentVariable("Path"));
		Console.WriteLine("
Usuario: {0}", Environment.GetEnvironmentVariable("Username"));

	}
}
  
Vamos a ver como manejar los ficheros con System.IO

/**
* Ficheros.cs
* Muestra el acceso a ficheros: sacar sus datos, leer y escribir en ellos
*/

using System;
using System.IO; // Habrá que importar esta claro..


// Clase Ficheros para manipular archivos
public class Ficheros
{
	private string fichero;

	public Ficheros (string nombre)
	{
		fichero = nombre;
	}

	// Método para sacar las propiedades de un fichero
	// devuelve true si el fichero existe
	public bool propiedades()
	{
		string prop = "";
		FileInfo info;

		try
		{
			info = new FileInfo(fichero);

			// Comprobamos si el fichero existe, es lo suyo
			if (info.Exists)
			{
				prop += "Nombre: " + info.Name +"
";
				prop += "Tamaña: " + info.Length +"
";
				prop += "Fecha Creación: " + info.CreationTime +"
";
				prop += "Último acceso: " + info.LastAccessTime +"
";
				prop += "Última escritura: " + info.LastWriteTime +"
";

				System.Console.WriteLine("PROPIEDADES:
{0}
", prop);
			}
		}
		catch (Exception e)
		// Otra excepción podría ser System.IO.FileNotFoundException
		{
			System.Console.WriteLine("Ocurrió una excepción: {0}", e);
			return false;
		}

		return true;
	}

	// Método para leer de un fichero
	public void leer()
	{
		// Definimos un StreamReader
		StreamReader lector;
		string linea = "";

		try
		{
			lector = File.OpenText(fichero);

			// Lee linea a linea
			while ( (linea = lector.ReadLine()) != null)
			{
				System.Console.WriteLine("{0}", linea);
			}

			// Cerramos la conexion
			lector.Close();

		}
		catch (Exception e)
		{
			System.Console.WriteLine("Ocurrió una excepción: {0}", e);
		}

	}

	// Método para escribir un fichero, al final de él
	// Para escribir desde el inicio, usa WriteText
	public void escribir()
	{
		// Un objeto para
		StreamWriter escribe;
		string linea = "";

		try
		{
			escribe = File.AppendText(fichero);
			// podria ser CreateText para crear uno nuevo
			// o también WriteText para machacar el texto

			while (linea != "##")
			{
				System.Console.WriteLine("Mete algo en el fichero, ## para terminar ");
				linea = System.Console.ReadLine();
				escribe.WriteLine(linea);
			}

			// Cerramos
			escribe.Close();

		}
		catch (Exception e)
		{
			System.Console.WriteLine("Ocurrió una excepción: {0}", e);
		}
	}

	// Método principal
	public static void Main (string[] args)
	{
		// Vamos a requerir un parámetro
		if (args.Length != 1)
		{
			System.Console.WriteLine("Pasame un nombre de fichero como parametro");
			return;
		}

		// Un  temporizador que salte cada 3 segundos...
		Ficheros miFichero = new Ficheros(args[0]);

		if (miFichero.propiedades())
		{
			miFichero.leer();

			// Y vamos a escribir
			miFichero.escribir();

			// A ver como ha quedado
			miFichero.leer();

			// Y las propiedades
			miFichero.propiedades();
		}

	}
}