Статични класове, полета и методи

+9 гласа
735 прегледа
попитан 2016 май 31 в Обща дискусия от Rado.T. (1,360 точки)

Искам да попитам с какво са по-различни и за какво се ползват? 

1 отговор

+2 гласа
отговорени 2016 юни 1 от Trendafil.V. (1,240 точки)
избран 2016 юни 2 от Mitko Vasilev
 
Най-добър отговор

Статичните класове не могат да се инстанцират и съответно всички техни полета,методи и тн. също са статични. Пример за такъв клас е 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(); 

    } 

Това поле е общо за различните инстанции и всяка една от тях може да го променя, което влияе и на другите инстанции. 

Надявам се, че хвана идеята. Ако има нещо неясно питай 

коментиран 2016 юни 8 от ralitsa_d (120 точки)
Здравей, не разбирам защо вторият път методът ще върне стойност 15. Нали в началото задаваш на i статична стойност 5, а в метода test() присвояваш на i стойност i = i + 5 => 5 + 5 => 10? Или i запазва последната присвоена стойност (10) и при следващото извикване на метода test() получава тази нова стойност + 5?
Знам, че това са подробности, но за мен като начинаещ е важно да разбера кое как работи :)
коментиран 2018 април 15 от bulsatkom (100 точки)
Той Колегата го каза по-горе, защото static типовете остават 1 за всяка инстанция  отначало е 5 после извиква метода и става 10, създава нов обект при който полето е отново с стойност 10 и като извика метода става 15
...