mercoledì 4 marzo 2009

Optional Attribute C#

Come posso implementare un Attributo Opzionale in una firma di un metodo ?

In C# è concettualmente difficile pensare ad una forma opzionale, ma chi arriva da VB, qualche domanda se la pone, probabilmente perchè può ancora ritenere che un parametro sia e rimanga un entità FLUTTUANTE.

Supponiamo di trovarci nella situazione di dover implementare noi un parametro opzionale.

Firma
private void Foo(string param1, string param2)
{
if ( param1 == null) {param1 ="";}
if ( param2 == null) {param2 ="";}

// resto del codice...
}

Chiamata
Foo("A","b")

Oppure
Foo("A",null)

Tecnicamente funziona, e non ci fa perdere troppo tempo.

Possiamo però trovarci nella spiacevole situazione di dover effettuare una chiamata ad un metodo già esistente non implementato da noi ...

SampleFoo sf = new SampleFoo();

sf.DoFooFoo(param1, param2);

Possiamo .. e per fortuna estendere SampleFoo e trasformare il nostro metodo sperando che tutto vada... perchè
del codice altri non v'e' certezza...

public class MyFooFoo :SampleFoo();

public void new DoFooFoo(string param1, string param2)
{
if ( param1 == null) {param1 ="";}
if ( param2 == null) {param2 ="";}
base.DoFooFoo ( param1, param2 );
}

Ed ecco fatto ..

Come sempre va data la giusta considerazione se stiamo creando una funzione per cui un parametro ci sembra o ci può sembrare opzionale.. probabilmente non stiamo considerando il fatto che si possano creare degli override... il che
sarebbe anche meglio.

Foo(string param1)

Foo(string param1, string param2)

Foo(string[] params)

Cmq.. anche questa è andata.

Nessun commento: