mercoledì 9 gennaio 2008

Static

Che cos'e' una classe statica ?
Tecnicamente parlando una classe statica è una oggetto che espone i propri membri senza aver bisogno di essere istanziato.
Una classe dichiarata come static non potrà essere ereditata.

Quando ne è consigliato l'utilizzo ?
L'impiego di una classe statica è consigliato quando la classe non contiene dati, comportamenti che dipendono dalla classe stessa.

Come si dichiara una classe statica ?
public static class TestStatic
Questa scrittura implica che tutti i membri della classe dovranno essere dichiartati static.

esempio
class Program
{
static void Main(string[] args)
{
string content = "testo dimostrativo";

TestStatic.WriteFile(@"C:\test.txt", content, true);

content = TestStatic.ReadFile(@"C:\test.txt");
}

}

public static class TestStatic
{
public static string ReadFile(string fileName)
{
string dataFromFile ="";

// processo di verifica ( esistenza )

// processo di lettura

return dataFromFile;
}

public static void WriteFile(string fileName, string fileContent, bool Append)
{
// processo di verifica ( percorso )

// processo di verifica ( modalità di scrittura)

// processo di scrittura
}
}

Posto che vi sia del codice e posto anche che questa situazione abbia una certa utilità, abbiamo creato una
sottospecie di utility statica che legge e scrive un file.

Posto che si voglia aggiungere un contatore dei soli file creati :
public static class TestStatic
{
private static int fileCount = 0;

public static string ReadFile(string fileName)
{
string dataFromFile ="";

// processo di verifica ( esistenza )

// processo di lettura

return dataFromFile;
}

public static void WriteFile(string fileName, string fileContent, bool Append)
{
// processo di verifica ( percorso )

// processo di verifica ( modalità di scrittura)

if (Append == false)
{
// implica che stiamo creando un nuovo file...
fileCount++;
}

// processo di scrittura
}

public int FileCounter()
{
return fileCount;
}
}

Aggiungendo un metodo la cui firma non è statica il compilatore non consente la "compilazione"
comunicando che per una classe statica tutti i membri devo essere tali.

public static class TestStatic
{
private static int fileCount = 0;

public static string ReadFile(string fileName)
{
string dataFromFile ="";

// processo di verifica ( esistenza )

// processo di lettura

return dataFromFile;
}

public static void WriteFile(string fileName, string fileContent, bool Append)
{
// processo di verifica ( percorso )

// processo di verifica ( modalità di scrittura)

if (Append == false)
{
// implica che stiamo creando un nuovo file...
fileCount++;
}

// processo di scrittura
}

public static int FileCounter()
{
return fileCount;
}
}

Si possono creare Classi non statiche con metodi statici ?

Si si può fare e a questo punto solo i metodi di quella classe potranno essere utilizzati come static,
senza quindi dover istanziare la classe.

class Program
{
static void Main(string[] args)
{

TestStaticMethod ts = new TestStaticMethod();

Console.WriteLine(ts.GetTestResult());

Console.WriteLine(TestStaticMethod.GetStaticTestResult());

}

}

public class TestStaticMethod
{

public TestStaticMethod()
{
// costruttore
}

public static string GetStaticTestResult()
{
return "Risultato statico del test";
}

public string GetTestResult()
{
return "Risultato " + DateTime.Now.ToShortTimeString() + " non statico del test";
}
}

Differenze fra le due classi TestStatic e TestStaticMethod

//
// Questo non può essere fatto
// la classe TestStatic non è visibile
public class Test : TestStatic
{

}

//
// Questo è consentito
public class Test : TestStaticMethod
{

}

Ed è consentito anche questo ...
class Program
{
static void Main(string[] args)
{

Test nTest = new Test();

Console.WriteLine(nTest.GetTestResult());

Console.WriteLine(Test.GetStaticTestResult());
}
}

public class Test : TestStaticMethod
{

}

Nessun commento: