Entwickler-Ecke
Basistechnologien - Zeiger in C#?
Marmelade - Mo 29.06.09 18:44
Titel: Zeiger in C#?
Moin,
Gibt es in C# eigentlich auch die "Zeiger"? Also die Addressen die auf einen Speicher verweisen?
Schonmal danke für die Antworten
MfG Marmelade
Moderiert von
Christian S.: Topic aus WinForms verschoben am Mo 29.06.2009 um 18:53
JüTho - Mo 29.06.09 19:02
Naja, es gibt sie, aber wozu? C# ist OOP, alles arbeitet mit Klassen und Objekten; ein konkretes Objekt ist sozusagen ein Verweis (Referenz) auf diese Instanz einer Klasse im Arbeitsspeicher. So gut wie alles, was sonst mit Zeigern gemacht wird, kann hier mit einfachen Variablen gemacht werden.
Ich bitte die Fachleute für Interna, meine Erläuterung nicht zu wörtlich zu nehmen. Für die praktische Arbeit mit C# sollte sie ausreichen.
Jürgen
gfoidl - Mo 29.06.09 19:22
Hallo,
ergänzend zu Jürgens Antwort:
Intern wird natürlich mit Zeigern gearbeitet - sonst könnte ein Programm gar nicht laufen. Sie werden benötigt um im Speicher zu lesen/schreiben. Die Common Language Runtime (CLR) kapselt aber die Zeigeroperationen durch einfache Wertzuweisungen. Somit ist es für den Programmieren (meiner Meinung nach) wesentlich leichter Code zu erstellen.
Die Möglichkeit mit Zeigern explizit zu arbeiten existiert aber auch in .net. Praktisch verwendet hab ich das aber noch nie (bzw. kann mich nicht mehr daran erinnern). Alle Zeigeroperationen laufen im "unischeren Kontext" d.h. die CLR hat keine Möglichkeit mehr die Operationen zu überwachen und daher sollten explizite Zeigeroperationen auch vermieden werden.
mfG Gü
Marmelade - Mo 29.06.09 21:00
Danke!
Hab das nur mal in c/++ gesehen und wollt wissen obs das hier auch gibt.
gourmelin - Di 30.06.09 09:05
Hallo!
Wie gfoidl schon sagte, man kann auch in C# mit Zeigern arbeiten.
Das ist häufig nötig wenn man Interop Code schreibt um mit unmanaged DLLs zu kommunizieren.
Die Notation ist dieselbe also *.
Um Pointer Arithmetik verwenden zu können braucht man das unsafe Schlüsselwort:
Hier ein Bsp aus der MSDN
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| using System; class UnsafeTest { unsafe static void SquarePtrParam(int* p) { *p *= *p; }
unsafe static void Main() { int i = 5; SquarePtrParam(&i); Console.WriteLine(i); } } |
Man muss dafür bei den Compiler Optionen unsicheren Code zulassen. In Visual Studio geht das in den Projekteigenschaften - Erstellen - "Unsicheren Code zulassen"
Moderiert von
Christian S.: C#-Tags hinzugefügt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!