Szukałem o zmiennych statycznych w C #, ale nadal nie rozumiem, do czego służy. Ponadto, jeśli spróbuję zadeklarować zmienną wewnątrz metody, nie da mi to pozwolenia. Czemu?
Widziałem kilka przykładów dotyczących zmiennych statycznych. Widziałem, że nie musimy tworzyć instancji klasy, aby uzyskać dostęp do zmiennej, ale to nie wystarczy, aby zrozumieć, do czego służy i kiedy należy jej używać.
Druga sprawa
class Book
{
public static int myInt = 0;
}
public class Exercise
{
static void Main()
{
Book book = new Book();
Console.WriteLine(book.myInt); // Shows error. Why does it show me error?
// Can't I access the static variable
// by making the instance of a class?
Console.ReadKey();
}
}
c#
static
static-variables
Kartik Patel
źródło
źródło
Book
) no poprzez instancję (book
), więc łatwiejszym rozwiązaniem jestBook.myInt
.Odpowiedzi:
static
Zmienna wartość dzieli go wśród wszystkich instancji klasy.Przykład bez deklarowania go jako statyczny:
Wyjaśnienie: Jeśli spojrzysz na powyższy przykład, po prostu deklaruję
int
zmienną. Kiedy uruchomię ten kod, dane wyjściowe będą10
i10
. To proste.Spójrzmy teraz na zmienną statyczną tutaj; Deklaruję zmienną jako
static
.Przykład ze zmienną statyczną:
Teraz, gdy uruchomię powyższy kod, dane wyjściowe będą
10
i15
. Zatem wartość zmiennej statycznej jest wspólna dla wszystkich instancji tej klasy.źródło
C # w ogóle nie ma zmiennych statycznych . Pole statyczne można zadeklarować w określonej definicji typu za pośrednictwem języka C #. Pole statyczne to stan współdzielony ze wszystkimi instancjami określonego typu. W związku z tym zakres pola statycznego jest pełny. Dlatego nie możesz zadeklarować pola statycznego w metodzie - metoda jest sama w sobie zakresem, a elementy zadeklarowane w metodzie muszą być niedostępne za granicą metody.
źródło
zmienne statyczne są używane, gdy wymagana jest tylko jedna kopia zmiennej. więc jeśli zadeklarujesz zmienną wewnątrz metody, nie ma zastosowania takiej zmiennej, staje się lokalna tylko do działania.
przykładem jest statyka
Zmienne zadeklarowane jako statyczne są zwykle współużytkowane we wszystkich wystąpieniach klasy.
Zmienne zadeklarowane jako statyczne są zwykle współużytkowane we wszystkich wystąpieniach klasy. Podczas tworzenia wielu instancji klasy VariableTest Ta zmienna stała jest wspólna dla nich wszystkich. Zatem w dowolnym momencie w stałej zmiennej będzie tylko jedna wartość ciągu.
Ponieważ istnieje tylko jedna kopia zmiennej dostępna dla wszystkich instancji, kod this.permament spowoduje błędy kompilacji, ponieważ można sobie przypomnieć, że this.variablename odnosi się do nazwy zmiennej instancji. W związku z tym dostęp do zmiennych statycznych należy uzyskać bezpośrednio, jak wskazano w kodzie.
źródło
Kilka przykładów ze świata rzeczywistego dla zmiennych statycznych:
budowanie klasy, w której można uzyskać zakodowane wartości dla swojej aplikacji. Podobny do wyliczenia, ale z większą elastycznością co do typu danych.
Powszechnie znany singleton, który pozwala kontrolować posiadanie dokładnie jednej instancji klasy. Jest to bardzo przydatne, jeśli chcesz mieć do niego dostęp w całej aplikacji, ale nie chcesz go przekazywać do każdej klasy tylko po to, aby ta klasa mogła z niego korzystać.
i tak można nazwać menedżera tekstur
O ostatnim pytaniu: odnosisz się do błędu kompilatora CS0176 . Próbowałem znaleźć więcej informacji na ten temat, ale mogłem tylko dowiedzieć się, co ma do powiedzenia msdn:
źródło
Zmienne statyczne są używane, gdy wymagana jest tylko jedna ich kopia. Wyjaśnię to na przykładzie:
Teraz stworzyliśmy 2 instancje dla naszego
class
okręgu, czyli_PI
tworzone są 2 zestawy kopii wraz z innymi zmiennymi. Powiedzmy, że jeśli mamy wiele instancji tej klasy,_PI
utworzonych zostanie wiele kopii zajmujących pamięć. Dlatego w takich przypadkach lepiej jest polubić takie zmienne_PI
static
i operować na nich.Teraz bez względu na to, ile wystąpień jest utworzonych dla
class
koła, istnieje tylko jedna kopia zmiennej_PI
zapisującej naszą pamięć.źródło
Klasy statyczne nie wymagają tworzenia obiektu tej klasy / tworzenia ich instancji, można poprzedzić słowo kluczowe C # static przed nazwą klasy, aby była statyczna.
Pamiętaj: nie tworzymy instancji klasy Console, klasy String, klasy Array.
źródło
Zaczynając od tego przykładu @Kartik Patel, trochę się zmieniłem, może teraz jest bardziej jasne o zmiennej statycznej
Zmienna klasy VS Zmienna wystąpienia w języku C #
Statyczne składowe klasy C # OR Zmienna klasy
}
https://en.wikipedia.org/wiki/Class_variable
https://en.wikipedia.org/wiki/Instance_variable
https://en.wikipedia.org/wiki/Static_variable
https://javaconceptoftheday.com/class-variables-and-instance-variables-in-java/?fbclid=IwAR1_dtpHzg3bC5WlGQGdgewaTvuOI6cwVeFUtTV8IZuGTj1qH5PmKGwX0yM
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-classes-and-static-class-members
Elementy członkowskie danych i elementy członkowskie funkcji, które działają na wystąpieniu typu, nazywane są elementami członkowskimi wystąpienia. Metoda ToString int (na przykład) to przykłady elementów członkowskich instancji. Domyślnie członkowie są członkami instancji. Elementy członkowskie danych i elementy członkowskie funkcji, które nie działają na wystąpieniu typu, ale raczej na samym typie, muszą być oznaczone jako statyczne. Metody Test.Main i Console.WriteLine są metodami statycznymi. Klasa Console jest w rzeczywistości klasą statyczną, co oznacza, że wszystkie jej elementy członkowskie są statyczne. W rzeczywistości nigdy nie tworzysz instancji konsoli - jedna konsola jest współdzielona przez całą aplikację.
źródło
W odpowiedzi na pytanie „kiedy go używać?” pytanie:
Często używam zmiennej statycznej (klasy), aby przypisać unikalny identyfikator instancji do każdej instancji klasy. Używam tego samego kodu na wszystkich zajęciach, jest to bardzo proste:
To ilustruje kilka punktów dotyczących zmiennych statycznych i metod:
Uważam to za przydatne, ponieważ tworzę aplikacje, w których używane są roje obiektów i dobrze jest być w stanie śledzić, ile zostało utworzonych, a także śledzić / przeszukiwać poszczególne instancje.
Używam również zmiennych klas do śledzenia takich rzeczy, jak sumy i średnie właściwości instancji, które mogą być raportowane w czasie rzeczywistym. Myślę, że klasa to dobre miejsce do przechowywania podsumowania informacji o wszystkich instancjach klasy.
źródło
Spróbuj zadzwonić bezpośrednio z nazwą klasy
Book.myInt
źródło
W porównaniu ze zmiennymi sesyjnymi, zmienne statyczne będą miały taką samą wartość dla wszystkich użytkowników, którzy biorą pod uwagę, że używam aplikacji wdrożonej na serwerze. Jeśli dwóch użytkowników uzyskuje dostęp do tej samej strony aplikacji, zmienna statyczna będzie przechowywać najnowszą wartość i ta sama wartość zostanie dostarczona obu użytkownikom w przeciwieństwie do zmiennych sesji, które są różne dla każdego użytkownika. Tak więc, jeśli chcesz mieć coś wspólnego i tego samego dla wszystkich użytkowników, w tym wartości, które mają być używane w kodzie aplikacji, użyj tylko statycznego.
źródło
Nie musisz tworzyć instancji obiektu, ponieważ yau użyje zmiennej statycznej: Console.WriteLine (Book.myInt);
źródło
Zmienna statyczna zachowuje swoją poprzednią wartość aż do zakończenia programu. Statyczny jest używany przez bezpośrednie wywołanie class_Name.Method () lub class_Name.Property. Nie jest potrzebne żadne odniesienie do obiektu. Najpopularniejszym zastosowaniem statycznego jest klasa Math w języku C #. Math.Sin (), Math.Cos (), Math.Sqrt ().
źródło