Co to jest klasa "statyczna"?

W C# jaka jest różnica między:

public static class ClassName {}

I:

public class ClassName {}
Author: svick, 2009-03-29

10 answers

Klasa statyczna nie może być utworzona i może zawierać tylko statyczne elementy. Stąd wywołania klasy statycznej są następujące: MyStaticClass.MyMethod(...) lub MyStaticClass.MyConstant.

Klasa niestatyczna może być utworzona instancyjnie i może zawierać elementy niestatyczne (konstruktory instancji, destruktory, indeksery). Nie - statyczny członek klasy nie-statycznej może być wywołany tylko przez obiekt:

MyNonStaticClass x = new MyNonStaticClass(...);
x.MyNonStaticMethod(...);
 34
Author: lmsasu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-06 18:06:40

Po pierwsze, komentarz do odpowiedzi zapytany o to, co oznacza "statyczny". W języku C# termin "static" oznacza "odnoszący się do samego typu, a nie do instancji tego typu."Uzyskujesz dostęp do statycznego elementu (z innego typu), używając nazwy typu zamiast odniesienia lub wartości. Na przykład:

// Static method, so called using type name
Guid someGuid = Guid.NewGuid();
// Instance method, called on a value
string asString = someGuid.ToString();
Klasy statyczne...

Klasy statyczne są zwykle używane jako klasy "użytkowe". Kanonicznym przykładem jest prawdopodobnie System.Math. Nie ma sensu tworzyć przykładu matematyki - to po prostu "jest". Kilka zasad (zarówno" can "jak i"can ' t"):

  • klasy statyczne zawsze wywodzą się z object. Nie można określić innego typu bazowego ani sprawić, by Klasa statyczna implementowała interfejs.
  • klasy statyczne nie mogą mieć żadnych członków instancji - wszystkie zmienne, metody itp. muszą być statyczne.
  • klasy statyczne nie mogą deklarować żadnych konstruktorów instancji, a kompilator nie tworzy domyślnie konstruktora bez parametru. (Przed pojawieniem się klas statycznych w C # 2.0, ludzie często tworzyli abstrakcyjną klasę z prywatnym konstruktorem, co uniemożliwiało tworzenie instancji. Nie ma potrzeby.)
  • klasy statyczne są domyślnie abstrakcyjne (tzn. są kompilowane do IL, które opisuje klasę abstrakcyjną), ale nie możesz dodać modyfikatora abstract samodzielnie.
  • klasy statyczne są niejawnie zapieczętowane (tzn. są kompilowane do IL, które opisuje klasę zapieczętowaną), ale nie można samemu dodać modyfikatora sealed.
  • klasy statyczne mogą być ogólne.
  • klasy statyczne mogą być zagnieżdżone, w klasach niestatycznych lub statycznych.
  • klasy statyczne mogą mieć zagnieżdżone typy, niestatyczne lub statyczne.
  • tylko statyczne, nie-ogólne klasy najwyższego poziomu mogą zawierać metody rozszerzeń (C# 3.0).
 64
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-05 12:48:41

Klasa statyczna również nie może być dziedziczona z, podczas gdy Klasa niestatyczna z elementami statycznymi może być dziedziczona z.

 6
Author: Dan Herbert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-29 18:08:42
public static class ClassName {}

Klasa statyczna jest jak zmienna globalna: możesz jej używać w dowolnym miejscu kodu bez tworzenia ich instancji. Na przykład: ClassName. Po operatorze dot można użyć dowolnej jego właściwości lub funkcji.

 public class ClassName {}

Ale jeśli masz klasę niestatyczną, musisz utworzyć instancję tej klasy. Na przykład:

 ClassName classNameObject = new ClassName(); 
 6
Author: Syed Tayyab Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-06 09:07:26

Wszystkie metody / właściwości w statycznej klasie muszą być statyczne, podczas gdy 'normalna' klasa może zawierać mieszankę instancji i statycznych metod.

 5
Author: Mark Simpson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-29 18:07:25

Nie można tworzyć instancji (tworzyć obiektów) klasy statycznej. I może zawierać tylko statyczne elementy.

Przykład: System.Matematyka

 3
Author: Henk Holterman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-29 18:08:05

Klasa Static może zawierać tylko statyczne elementy.

Statyczny element może być użyty bez tworzenia instancji klasy.

 3
Author: Konstantin Tarkus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-29 19:29:53

Statyczne klasy i członkowie są używane do tworzenia danych i metod, do których można uzyskać dostęp bez tworzenia instancji (używając słowa kluczowego new, nie mogą mieć konstruktora) klasy.

Klasy statyczne mogą być zadeklarowane, gdy nie ma zależności od własnej tożsamości obiektu, więc Klasa statyczna musi zawierać tylko statyczne elementy.

Klasy te są ładowane przez CLR, gdy program lub Przestrzeń nazw zawierająca klasę jest ładowana.

Są również zapieczętowane, nie mogą być odziedziczone po.
 2
Author: CMS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-29 18:12:42

Http://www.javaworld.com/javaworld/javaqa/1999-08/01-qa-static2.html - Bardzo dobry artykuł na ten temat. To dla Javy. Ale myślę, że concept powinien to samo w C# też.

 2
Author: Sanjeev Kumar Dangi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-19 12:13:27

Zmienna statyczna w c

Zmienna lokalna do klasy jako zmienne auto ale zmienna statyczna nie znika, ponieważ funkcja nie jest już aktywna.Ich wartości utrzymują się.Jeśli kontrola powróci, zmienne statyczne mają tę samą wartość

Funkcja statyczna w c funkcje, które nie są widoczne dla funkcji w innych plikach.

*static data members in cpp * składnikami danych mogą być zmienne lub funkcje w cpp statyczne dotyczy obu elementów danych sama klasa może być statyczny "Istnieje tylko jedna kopia statycznych elementów danych współdzielonych przez wszystkie obiekty w tej klasie" static data members może uzyskać dostęp tylko do static data members

Static class ta klasa nie może tworzyć instancji obiektów

 1
Author: richu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-06 17:41:47