Metainformationen zur Seite
  •  

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
start:visualstudio2017:programmieren:csharp [2018/10/03 12:51]
wikiadmin [Strings]
start:visualstudio2017:programmieren:csharp [2021/12/16 13:30] (aktuell)
wikiadmin [Referenz- oder Value- Typ?]
Zeile 226: Zeile 226:
  
 ---- ----
 +
 +===== Referenz- oder Value- Typ? =====
 +
  
 ====== Klassen und Objekte ====== ====== Klassen und Objekte ======
Zeile 1349: Zeile 1352:
 Strings in .NET sind immer Unicode, d.h. 16Bit gross. Mit Hilfe der 2^15(65535) darstellbaren Zeichen können alle Zeichen dieser Welt und einige Sonnderzeichen dargestellt werden. Wenn man es genau betrachtet, ist sogar noch ca. 1/3 Reserve verfügbar. Strings in .NET sind immer Unicode, d.h. 16Bit gross. Mit Hilfe der 2^15(65535) darstellbaren Zeichen können alle Zeichen dieser Welt und einige Sonnderzeichen dargestellt werden. Wenn man es genau betrachtet, ist sogar noch ca. 1/3 Reserve verfügbar.
 ==== Stringzuweisungen ==== ==== Stringzuweisungen ====
 +Direkte Zuweisung:
 +<code C# [enable_line_numbers="true",highlight_lines_extra="900"]>
 +string myString = "Hallo Welt"; // Zuweise bei der Deklaration oder...
 +
 +string myString
 +myString="Hallo Welt"; //... nach der Deklaration.
 +</code>
 +
 +Zuweisen über die **Copy()**-Methode:
 +<code C# [enable_line_numbers="true",highlight_lines_extra="9"]>
 +string myString1 = "JMZ Solution";
 +string myString2 = String.Copy(myString1);// Inhalt von myString1 wird nach myString2 kopiert
 +</code>
 +oder über die Verwendung des Teilstring Befehls **Substring()**:
 +<code C# [enable_line_numbers="true",highlight_lines_extra="9"]>
 +string myString1 = "JMZ Solution";
 +string myString2 = myString1.Substring(6);
 +</code>
 +Zuweisung mit Hilfe von Escape-Sequenzen:
 +<code C# [enable_line_numbers="true",highlight_lines_extra="9"]>
 +string myString = "Dieser Text hat \"Ausführungszeichen\".";
 +</code>
 +Die Ausgabe wäre hier:
 +<code C# [enable_line_numbers="false",highlight_lines_extra="9"]>
 +Dieser Text hat "Ausführungszeichen".
 +</code>
 +Manchmal möchte man die Bearbeitung von Escape-Sequenzen auch unterbinden. Typischerweise bei der Behandlung von Pfadangaben. Um den Backshlash "\", der ja auch die Position einer Escape-Sequenz angibt, in einem String zu schreiben, müsste man wie folgt formulieren:
 +<code C# [enable_line_numbers="true",highlight_lines_extra="9"]>
 +string myString = "d:\\meinlaufwerk\\ordner\\datei.doc";
 +</code>
 +Bei der Eingabe von "@" vor dem String wird die Bearbeitung von Escape-Sequenzen im nachfolgenden String verhindert:
 +<code C# [enable_line_numbers="true",highlight_lines_extra="9"]>
 +string myString = @"d:\meinlaufwerk\ordner\datei.doc";
 +</code>
 +
 ==== Zugriff auf String ==== ==== Zugriff auf String ====
-===== Formatierung von Daten =====+Ein Beispiel: 
 +<code C# [enable_line_numbers="true",highlight_lines_extra="13"]> 
 +using System; 
 +class TestClass 
 +
 +   public static void Main() 
 +   { 
 +      string myStr = "Hallo Welt."; 
 +      string xStr = string.Empty; 
 +       
 +      for(int i=0; i<myStr.Length; i++) 
 +      { 
 +         string x = myStr[i].ToString(); 
 +         if(x != "e")  
 +            xStr += x; 
 +      } 
 +       
 +      Console.WriteLine(xStr); 
 +   } 
 +
 +</code> 
 +Wir sehen in diesem Beispiel, wie auch Operatoren, hier **+=**, auf Strings angewendet werden können. 
 + 
 + 
 +---- 
 +{{:start:visualstudio2017:programmieren:csharp:hinweis.png?50 |}}Thema Typensicherheit: string und char können nicht gemischt werden, obwohl es sich bei einem string um eine Aneinanderkettung von chars handelt. 
 +---- 
 + 
 +Strings sind nicht veränderbar (immutable). Das bedeutet, dass bei jeder Stringfunktion ein neues Objekt angelegt wird. Sogar ein Leerstring **""** ist ein eigenes Objekt. Aus gründen der Performance soll deshalb für Leerstrings das vordefinierte Objekt **string.Empty** aus der Klasse string verwendet werden. 
 +Häufig muss geprüft werden, ob ein String null oder leer ist. Dazu stehen die Methoden **IsNullOrEmpty** zu Verfügung: 
 +<code C# [enable_line_numbers="true",highlight_lines_extra="900"]> 
 +if (!string.IsNullOrEmpty(myStr)) 
 +... 
 +</code> 
 +.NET 4 hat eine weitere Methode mit demselben Zweck: 
 +<code C# [enable_line_numbers="true",highlight_lines_extra="900"]> 
 +if (!string.IsNullOrWhitespace(myStr)) 
 +... 
 +</code> 
 + 
 +---- 
 +{{:start:visualstudio2017:programmieren:csharp:uebungen.png?50 |}}Studieren Sie in der Online-Hilfe die Methoden, die string zur Verfügung stellt. 
 +---- 
 + 
 +===== Formatierung von Daten ====
 ==== Standardformate ==== ==== Standardformate ====
 +
 +Datenformatierung haben wir bereits in Codebeispielen angetroffen.
 +Die Angaben, welche Art von Formatierung gewünscht wird, geschied im Platzhalter durch die Angeben eines Formatzeichens und ggf. einer Präzisionsangabe für die Anzahl Stellen, die ausgegeben werden sollen. Beim folgenden Beispiel wollen wir, dass die Zahlen korrekt untereinander stehen:
 +
 +<code C# [enable_line_numbers="true",highlight_lines_extra="13,14"]>
 +// Beispiel Formatierung 1
 +using System;
 +class TestClass
 +{
 +   public static void Main()
 +   {
 +      int a,b
 +      Console.WriteLine("Geben Sie eine Zahl ein: ");
 +      a = Convert.ToInt32(Console.ReadLine());
 +      Console.WriteLine("Geben Sie Zahl 2 ein: ");
 +      b = Convert.ToInt32(Console.ReadLine());
 +      Console.WriteLine("Die Zahlen lauten:");
 +      Console.WriteLine("Zahl 1: {0:D5}", a );
 +      Console.WriteLine("Zahl 2: {0:D5}", b );
 +   }
 +}
 +</code>
 +
 +Bei der Eingabe von 75 u nd 1024 würde die Ausgabe folgendermassen aussehen:
 +
 +<code C# [enable_line_numbers="false",highlight_lines_extra="13,14"]>
 +Die Zahlen lauten:
 +Zahl 1: 00075
 +Zahl 2: 01024
 +</code>
 +
 +Im Falle einer Hexadezimaleausgabe würde die ganze Zahl auch automatisch umgerechnet:
 +
 +<code C# [enable_line_numbers="true",highlight_lines_extra="13,14"]>
 +// Beispiel Formatierung 2
 +using System;
 +class TestClass
 +{
 +   public static void Main()
 +   {
 +      int a,b
 +      Console.WriteLine("Geben Sie eine Zahl ein: ");
 +      a = Convert.ToInt32(Console.ReadLine());
 +      Console.WriteLine("Geben Sie Zahl 2 ein: ");
 +      b = Convert.ToInt32(Console.ReadLine());
 +      Console.WriteLine("Die Zahlen lauten:");
 +      Console.WriteLine("Zahl 1: {0:X4}", a );
 +      Console.WriteLine("Zahl 2: {0:X4}", b );
 +   }
 +   
 +   // Ein weiteres Formatierungsbeispiel:
 +   // {0, 20:5 } 0=Index, 20=Aligment 5=Format
 +   // index -> Dieses Zeichen wird vorangestellt.
 +   // Aligment -> Es werden 20 Stellen dargestellt.
 +   // Format -> 5 Stellen werden dargestelllt mit Index Zeichen voran.
 +}
 +</code>
 +
 +Die Formatierungszeichen und ihre Bedeutung:
 +
 +^Zeichen^Formatierung^
 +|C,c|Hier noch die Bedeutung eintragen.....|
 +
 ==== Selbstdefinierte Formate ==== ==== Selbstdefinierte Formate ====
 ==== Ausrichtung ==== ==== Ausrichtung ====