Статичните класове не могат да се инстанцират и съответно всички техни полета,методи и тн. също са статични. Пример за такъв клас е Math. Когато го използваш, ти не създаваш нов такъв обект. Не можеш да напишеш
var math = new Math().
От тук и всичките негови методи и полета се използват директно през типа. Например имаш
decimal pi = Math.PI
което ще ти даде стойността 3,1415.....
Пример и за статичен метод:
Math.Sqrt(16) // ще ти върне 4.
Тези класове не могат и да се наследяват. Понеже не се инстанцират нямат в себе си this. Могат да имат само статичен конструктор.
Отделно можеш да имаш нестатичен клас със статични методи. Такъв е int. Можеш да създаваш различни обекти от тип int, но имаш и следния метод, който се достъпва през типа:
int.Parse(“55”)// превръща стринг в целочислен тип
Идеята на това е, че можеш да използваш метода без да създаваш нов обект за тази цел.
Нестатичният клас може да има и статични полета. Идеята при тях е това поле да е еднакво и общо за всички инстанции на този клас. Пример:
public class Variable
{
public static int i = 5;
public void test()
{
i=i+5;
Console.WriteLine(i);
}
}
public class Exercise
{
static void Main()
{
Variable var = new Variable();
var.test();// тук ще изпише 10
Variable var1 = new Variable();
var1.test();// тук изписва 15
Console.ReadKey();
}
}
Това поле е общо за различните инстанции и всяка една от тях може да го променя, което влияе и на другите инстанции.
Надявам се, че хвана идеята. Ако има нещо неясно питай