Autor Beitrag
Marmelade
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

Windows XP, Windows7 Ultimate
C#
BeitragVerfasst: Mo 29.06.09 18:44 
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 user profile iconChristian S.: Topic aus WinForms verschoben am Mo 29.06.2009 um 18:53
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 157
Erhaltene Danke: 19

Win XP
C#, Fortran 95 - Visual Studio
BeitragVerfasst: 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ü

_________________
Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!
Marmelade Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

Windows XP, Windows7 Ultimate
C#
BeitragVerfasst: Mo 29.06.09 21:00 
Danke!
Hab das nur mal in c/++ gesehen und wollt wissen obs das hier auch gibt.
gourmelin
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
// cs_unsafe_keyword.cs
// compile with: /unsafe
using System;
class UnsafeTest
{
   // Unsafe method: takes pointer to int:
   unsafe static void SquarePtrParam(int* p)
   {
      *p *= *p;
   }

   unsafe static void Main()
   {
      int i = 5;
      // Unsafe method: uses address-of operator (&):
      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 user profile iconChristian S.: C#-Tags hinzugefügt