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
{
}