Lokale Variablen in C♯
Beispiel
Program.cs
public static class Program
{ public static void Main()
{ { int n = 2;
double x = 2.3;
decimal d = 2.3m;
string s = "abc";global::System.Console.WriteLine( n );
global::System.Console.WriteLine( x );
global::System.Console.WriteLine( d );
global::System.Console.WriteLine( s ); }{ var n = 2;
var x = 2.3;
var d = 2.3m;
var s = "abc";global::System.Console.WriteLine( n );
global::System.Console.WriteLine( x );
global::System.Console.WriteLine( d );
global::System.Console.WriteLine( s ); }}}global::System.Console.Out
2
2.3
2.3
abc
2
2.3
2.3
abcProgram.cs
public static class Program
{ public static void Main()
{ int n = 2;
double x = 2.3;
decimal d = 2.3m;
string s = "abc";/* Wert der Zuweisung */
global::System.Console.WriteLine( n = 4 );
global::System.Console.WriteLine( ( x = 2.1 )+ 1.1 );
global::System.Console.WriteLine( s = "def" );/* Wirkung der Zuweisung */
global::System.Console.WriteLine( n );
global::System.Console.WriteLine( x );
global::System.Console.WriteLine( s );/* Zuweisung als Anweisungsausdruck */
n = 1;
x = 8.1;
s = "ghi";global::System.Console.WriteLine( n );
global::System.Console.WriteLine( x );
global::System.Console.WriteLine( s ); }}global::System.Console.Out
4
3.2
def
4
2.1
def
1
8.1
ghi
Erklärung
- Variablen
- ECMA-334, 4th edition:
Variables represent storage locations. Every variable has a type that determines what values can be stored in the variable.
(…)
A local variable is declared by a local-variable-declaration, foreach-statement, or specific-catch-clause of a try-statement. - Variablendeklarationen
- statische Klassenvariablen, Zugriffe von innen/außen, Vergleich mit Methoden und Eigenschaften
- Blockvariablen
- Vergleich mit Literalen
- Zusammenspiel mit Klassenvariablen
- Typwandlung bei Initialisierung
- Folge von Blöcken mit gleichen Variablennamen
- Verschachtelung von Blöcken
- Wie weit kann gerechnet werden?
- statische Variablen werden stillschweigend auf Fehlwerte initialisiert, Blockvariablen nicht
- checked { a = b + c; }
- Zuweisung
- Eine Variable ist ein Speicher, und ein Speicher kann geschrieben oder gelesen werden.
- Die Leseoperation wird durch Verwendung des Variablennamens als Argument oder Operand der meisten Operatoren ausgedrückt.
- Die Schreiboperation wird durch Verwendung des Variablennamens Operand spezieller Operatoren oder – unter Umständen – als Argument spezieller Funktionen ausgedrückt. Insbesondere durch Verwendung als linker Operand der Zuweisung »=«.
v = 2;
- v = v
- Links: Referenzkontext ⁻, rechts Wertkontext ⁻
- Als Wert einer Variablen ist jeder Wert aus dem Typ der Variablen zulässig.
- Der Typ einer Variablen kann nicht verändert werden.
- Die Variablen in dem folgenden Block sind praktisch Konstanten, da sie nur einmal initialisiert und danach nicht mehr verändert werden. C♯ erlaubt es aber (im Gegensatz zu C++ oder Java ) nicht, solche Variablen als Konstanten zu kennzeichnen, also festzulegen, daß sie nach ihrer Initialisierung nicht mehr verändert werden können sollen.
{ double x = 1.0;
double y = global::System.Math.Sin( x );
double z = global::System.Math.Sqrt( y );
double u = global::System.Math.Pow( y, 0.51 );
global::System.Console.WriteLine( z );
global::System.Console.WriteLine( u ); }}- Zuweisungsverträglichkeiten
- int kann an double zugewiesen werden
Zuweisungen an Eigenschaften
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine( global::System.Console.Title );
global::System.Console.Title = "abc";
global::System.Console.WriteLine( global::System.Console.Title ); }}- Protokoll
C:\example
abc
Der Wert der Zuweisung
Der Wert einer Zuweisung ist der zugewiesene Wert.
Program.cs
public static class Program
{ public static void Main()
{ int n;global::System.Console.WriteLine( ( n = 1000 ) );
}}
- Protokoll
1000
(Durch ein implizite Wandlung in den Typ der Zielvariablen wird der Wert in C♯ nie verändert, so daß es nicht nötig ist, zwischen dem zugewiesenen Wert und dem Wert der Variablen nach der Zuweisung zu unterscheiden.)
Übung
/ Erhöhen
Wie wird der Wert einer Variablen i um 7 erhöht?
- Erhöhen einer Variablen um 7?
Übung
/ Vertauschen
Wie wird der Wert einer Variablen i mit dem Wert einer Variablen j vertauscht?
- Vertauschen zweier Variablen?
Hinweis für den Dozenten ► Hier gegebenenfalls einen Debugger vorstellen
Übung
public static class Program
{ public static void Main()
{ double x = 1.0;
double y = global::System.Math.Sin( x );
double z = global::System.Math.Sqrt( y );
double u = global::System.Math.Pow( y, 0.51 );
global::System.Console.WriteLine( z );
global::System.Console.WriteLine( u ); }}0.9173172759781081
0.9157353176470164- Schreiben Sie die Übersetzungseinheit "Sinus1.cs" so um, daß dieselben Werte ausgegeben werden und dieselben Numerale und Funktionen zur Berechnung verwendet werden, aber keine Variablen mehr in dem Programm vorkommen. Ersetzen Sie zunächst die Variablen "x" überall durch ihre Definition, also durch den Wert "1.0", und entfernen Sie die Definition der Variablen "x". Nach diesem Schema können dann alle anderen Definitionen eliminiert werden, bis nur noch die beiden Ausgabeausdrücke übrigbleiben.
Übung
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine( global::System.Math.Sin( 1.0 + global::System.Math.Log( 2.178 )));
global::System.Console.WriteLine( global::System.Math.Cos( 1.0 + global::System.Math.Log( 2.178 ))); }}0.9785261962919047
-0.20612249554693626- Schreiben Sie die Einheit "Sinus2.cs" so um, daß der derzeit wiederholt vorkommende gleiche Teilausdruck nur noch einmal vorkommt. Speichern Sie dessen Wert dazu in eine Variable und verwenden Sie die Variable dann an seiner Stelle. Dabei soll nichts schon im Kopf ausgerechnet werden, es sollen weiterhin dieselben Operatoren und Methoden verwendet werden. Die Ausgabe des Programmes darf sich dadurch nicht ändern.