Ich habe nach statischen Variablen in C # gesucht, aber ich verstehe immer noch nicht, wie sie verwendet werden. Wenn ich versuche, die Variable innerhalb der Methode zu deklarieren, erhalte ich keine Berechtigung dazu. Warum?
Ich habe einige Beispiele für die statischen Variablen gesehen. Ich habe gesehen, dass wir keine Instanz der Klasse erstellen müssen, um auf die Variable zuzugreifen, aber das reicht nicht aus, um zu verstehen, was sie verwendet und wann sie verwendet werden soll.
Zweite Sache
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
quelle
quelle
Book
) no über eine Instanz (book
) zugreifen , daher ist die Lösung einfacherBook.myInt
.Antworten:
Eine
static
Variable teilt den Wert aller Instanzen der Klasse.Beispiel ohne es als statisch zu deklarieren:
Erläuterung: Wenn Sie sich das obige Beispiel ansehen, deklariere ich nur die
int
Variable. Wenn ich diesen Code ausführe, lautet die Ausgabe10
und10
. Es ist einfach.Schauen wir uns hier die statische Variable an. Ich deklariere die Variable als
static
.Beispiel mit statischer Variable:
Wenn ich jetzt über Code laufe, wird die Ausgabe
10
und sein15
. Der statische Variablenwert wird also von allen Instanzen dieser Klasse gemeinsam genutzt.quelle
C # hat überhaupt keine statischen Variablen . Sie können ein statisches Feld in der jeweiligen Typdefinition über C # deklarieren . Das statische Feld ist ein Status, der von allen Instanzen eines bestimmten Typs gemeinsam genutzt wird. Daher ist der Umfang des statischen Feldes vom gesamten Typ. Aus diesem Grund können Sie innerhalb einer Methode kein statisches Feld deklarieren. Die Methode ist selbst ein Bereich, und auf Elemente, die in einer Methode deklariert sind, muss über den Methodenrand hinweg nicht zugegriffen werden können.
quelle
statische Variablen werden verwendet, wenn nur eine Kopie der Variablen erforderlich ist. Wenn Sie also eine Variable innerhalb der Methode deklarieren, wird diese Variable nicht verwendet. Sie wird lokal, um nur zu funktionieren.
Beispiel für statische ist
Als statisch deklarierte Variablen werden gemeinsam von allen Instanzen einer Klasse verwendet.
Als statisch deklarierte Variablen werden gemeinsam von allen Instanzen einer Klasse verwendet. Wenn Sie mehrere Instanzen der VariableTest-Klasse erstellen Diese permanente Variable wird von allen gemeinsam genutzt. Somit ist zu einem bestimmten Zeitpunkt nur ein Zeichenfolgenwert in der permanenten Variablen enthalten.
Da für alle Instanzen nur eine Kopie der Variablen verfügbar ist, führt der Code this.permament zu Kompilierungsfehlern, da daran erinnert werden kann, dass sich this.variablename auf den Namen der Instanzvariablen bezieht. Somit ist auf statische Variablen direkt zuzugreifen, wie im Code angegeben.
quelle
Einige Beispiele aus der "realen Welt" für statische Variablen:
Erstellen einer Klasse, in der Sie fest codierte Werte für Ihre Anwendung erreichen können. Ähnlich einer Aufzählung, jedoch mit mehr Flexibilität beim Datentyp.
Mit dem weithin bekannten Singleton kann so gesteuert werden, dass genau eine Instanz einer Klasse vorhanden ist. Dies ist sehr nützlich, wenn Sie in Ihrer gesamten Anwendung darauf zugreifen möchten, es jedoch nicht an jede Klasse übergeben möchten, damit diese Klasse es verwenden kann.
und so würden Sie den Texturmanager nennen
Zu Ihrer letzten Frage: Sie beziehen sich auf den Compilerfehler CS0176 . Ich habe versucht, mehr Informationen darüber zu finden, konnte aber nur herausfinden, was die MSDN dazu zu sagen hatte:
quelle
Statische Variablen werden verwendet, wenn nur eine Kopie davon erforderlich ist. Lassen Sie mich dies anhand eines Beispiels erklären:
Jetzt haben wir hier 2 Instanzen für unseren
class
Kreis erstellt, dh 2 Sätze von Kopien_PI
zusammen mit anderen Variablen werden erstellt. Sagen wir also, wenn wir viele Instanzen dieser Klasse haben, werden mehrere Kopien_PI
erstellt, die den Speicher belegen. In solchen Fällen ist es also besser, solche Variablen zu mögen_PI
static
und damit zu arbeiten.Unabhängig davon, wie viele Instanzen für den
class
Kreis erstellt wurden, existiert nur eine Kopie der Variablen_PI
, die unseren Speicher spart.quelle
Bei statischen Klassen müssen Sie kein Objekt dieser Klasse erstellen / instanziieren. Sie können dem C # -Schlüsselwort static vor dem Klassennamen ein Präfix voranstellen, um es statisch zu machen.
Denken Sie daran: Wir instanziieren nicht die Konsolenklasse, String-Klasse, Array-Klasse.
quelle
Ausgehend von diesem @ Kartik Patel-Beispiel habe ich ein wenig geändert, vielleicht ist jetzt klarer über statische Variablen
Klassenvariable VS Instanzvariable in C #
Statische Klassenmitglieder C # ODER Klassenvariable
}}
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
Die Datenelemente und Funktionselemente, die mit der Instanz des Typs arbeiten, werden als Instanzelemente bezeichnet. Die ToString-Methode des int (zum Beispiel) sind Beispiele für Instanzmitglieder. Standardmäßig sind Mitglieder Instanzmitglieder. Datenelemente und Funktionselemente, die nicht für die Instanz des Typs, sondern für den Typ selbst ausgeführt werden, müssen als statisch markiert werden. Die Methoden Test.Main und Console.WriteLine sind statische Methoden. Die Konsolenklasse ist eigentlich eine statische Klasse, was bedeutet, dass alle ihre Mitglieder statisch sind. Sie erstellen niemals Instanzen einer Konsole - eine Konsole wird für die gesamte Anwendung freigegeben.
quelle
Als Antwort auf die Frage "Wann soll es verwendet werden?" Frage:
Ich verwende oft eine statische (Klassen-) Variable, um jeder Instanz einer Klasse eine eindeutige Instanz-ID zuzuweisen. Ich benutze in jeder Klasse den gleichen Code, es ist sehr einfach:
Dies veranschaulicht einige Punkte zu statischen Variablen und Methoden:
Ich finde das nützlich, weil ich Anwendungen entwickle, in denen Schwärme von Objekten verwendet werden, und es gut ist, zu verfolgen, wie viele erstellt wurden, und einzelne Instanzen zu verfolgen / abzufragen.
Ich verwende auch Klassenvariablen, um Dinge wie Summen und Durchschnittswerte der Eigenschaften der Instanzen zu verfolgen, die in Echtzeit gemeldet werden können. Ich denke, die Klasse ist ein guter Ort, um zusammenfassende Informationen über alle Instanzen der Klasse aufzubewahren.
quelle
Versuchen Sie es direkt mit dem Klassennamen aufzurufen
Book.myInt
quelle
Beim Vergleich mit Sitzungsvariablen haben statische Variablen für alle Benutzer den gleichen Wert, wenn ich eine Anwendung verwende, die auf dem Server bereitgestellt wird. Wenn zwei Benutzer auf dieselbe Seite einer Anwendung zugreifen, enthält die statische Variable den neuesten Wert, und im Gegensatz zu Sitzungsvariablen, die für jeden Benutzer unterschiedlich sind, wird beiden Benutzern derselbe Wert bereitgestellt. Wenn Sie also für alle Benutzer etwas Gemeinsames und Gleiches wünschen, einschließlich der Werte, die im Anwendungscode verwendet werden sollen, verwenden Sie nur statisch.
quelle
Sie müssen kein Objekt instanziieren, da Sie eine statische Variable verwenden werden: Console.WriteLine (Book.myInt);
quelle
Die statische Variable behält ihren vorherigen Wert bis zum Beenden des Programms bei. Statisch wird verwendet, indem direkt class_Name.Method () oder class_Name.Property aufgerufen wird. Es wird keine Objektreferenz benötigt. Die beliebteste Verwendung von Statik ist die Matheklasse von C #. Math.Sin (), Math.Cos (), Math.Sqrt ().
quelle