C#

Effettuare un lavoro periodico con la classe Timer del C#

La classe System.Timers.Timer consente di eseguire, periodicamente, un metodo scelto.
Il suo utilizzo è abbastanza semplice:

using System;
using System.Timers;

namespace test
{
	class MainClass
	{
		private static int toDelete = 0;

		public static void Main (string[] args)
		{
			Console.WriteLine(
				">> Esempio Timer << " +
			    "[premi un tasto per terminare]");

			Timer timer = new Timer();
			timer.Interval = 1000.0;
			timer.Elapsed += new ElapsedEventHandler(TimerEvent);
			timer.Enabled = true;

			Console.Read();
			timer.Enabled = false;
			Console.WriteLine("\nFine");
		}

		public static void TimerEvent(Object sender, ElapsedEventArgs e)
		{

			String timestamp = e.SignalTime.ToString();

			for(int i=0; i < toDelete; i++)
			{
				Console.Write("\b");
			}

			toDelete = timestamp.Length;
			Console.Write(timestamp);
		}
	}
}

La classe Dictionary di C#

La classe Dictionary, contenuta nel namespace System.Collections.Generic, rappresenta una collezione di chiavi-valori.
Essendo implementata come una tabella hash, ottenere un valore a partire da una chiave ha complessità vicina O(1) (dipende comunque anche dalla qualità dell’algoritmo di hash definito per il tipo chiave).

Dictionary una classe generica, ed è dunque necessario specificare la classe della chiave e quella del valore:

using System;
using System.Collections.Generic;

namespace test
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			Dictionary<String, String> dict =
				new Dictionary<String, String>();
		}
	}
}

Continua >

C#: la parola chiave “is”

La keyword is consente di sapere, a runtime, se un oggetto è compatibile con un tipo specificato.
Essa restituisce true se l’oggetto in esame non è null e se è possibile sottoporlo a cast verso il tipo specificato senza che venga sollevata un’eccezione.

Continua >

C#: le proprietà

In C#, le proprietà sono membri che forniscono un meccanismo semplificato di lettura e scrittura dei campi di una classe.
Solitamente si utilizzano le proprietà per accedere ai campi privati (anche se possono essere utilizzati anche per campi pubblici), al posto dei metodi setter/getter (il tipico approccio di Java).

Continua >

L’istruzione “using” del C#

L’istruzione using del C# è utilizzata per definire un ambito all’esterno del quale uno o più oggetti verranno eleminati.
L’oggetto fornito all’istruzione using deve necessariamente implementare l’interfaccia System.IDisposable (e, di conseguenza, il metodo Dispose, che rilascerà le risorse).
Si esce dall’ambito definito da using quando termina il blocco o in presenza di un’eccezione.

Continua >

I parametri di metodo in C#

In C#, per i parametri dichiarati di un metodo, il normale comportamento consiste nella possibilità di passargli un valore, che potrà essere modificato all’interno del metodo in questione. Tuttavia le modifiche apportate al valore del parametro rimarrano locali al metodo cioè non avranno effetto all’interno della routine chiamante.

Continua >

Multithreading in C#

Il .NET framework permette di sviluppare applicazioni multithreading utilizzando le classi incluse nel namespace System.Threading.
Più precisamente, un thread è modellato come un oggetto di classe Thread.

In seguito, istanzieremo un oggetto Thread utilizzando il costruttore:

public Thread( ThreadStart start )

dove ThreadStart rappresenta il metodo da far eseguire al thread.

Continua >

L’algoritmo di ricerca binaria

La ricerca binaria, o dicotomica, è una particolare ricerca, effettuabile su insiemi ordinati, particolarmente efficiente.
Il suo costo computazionale è $latex O(1) $ nel caso ottimo, $latex O(log n) $ nel caso pessimo.

Continua >

Fibonacci iterativo in C#

La seguente implementazione iterativa dell’algoritmo di Fibonacci sfrutta lo statement yield e l’interfaccia IEnumerable, definita nel namespace System.Collections.Generic, per generare i primi n numeri della serie di Fibonacci:

Continua >

Distanza euclidea bi-dimensionale

La distanza tra due punti $latex P = (x_{1}, y_{1}) $, $latex Q = (x_{2}, y_{2}) $ è calcolabile, utilizzando il teorema di Pitagora, mediante la formula:

[latex] \sqrt{ (x_{1} – x_{2})^{2} + (y_{1} – y_{2})^{2} } [/latex]

Continua >