4 Stimmen

C-Zeiger in C#

Ist diese Funktionsdeklaration in C#:

void foo(string mystring)

dasselbe wie dieses in C:

void foo(char *)

d.h. erhält die aufgerufene Funktion in C# einen Zeiger hinter den Kulissen?

1voto

CiNN Punkte 9602

Nein in c# ist string unicode. in c# ist es nicht ein Zeiger genannt, aber eine Referenz.

1voto

Wenn Sie meinen, ob die Methode auf den Inhalt des Zeichenraums zugreifen darf, lautet die Antwort: Ja.

1voto

Fire Lancer Punkte 28368

Ja, denn eine Zeichenkette hat eine dynamische Größe, so dass hinter den Kulissen Heap-Speicher vorhanden sein muss.

Sie sind jedoch NICHT dasselbe.

in c zeigt der Zeiger auf eine Zeichenkette, die auch an anderen Stellen verwendet werden kann, so dass sich eine Änderung auf diese anderen Stellen auswirken wird.

1voto

Chris Ammerman Punkte 14591

Alles, was kein "Wertetyp" ist, was im Wesentlichen Enums, Booleans und eingebaute numerische Typen umfasst, wird "per Referenz" übergeben, was wohl dasselbe ist wie der C/C++-Mechanismus der Übergabe per Referenz oder Zeiger. Syntaktisch und semantisch ist es im Wesentlichen identisch mit der C/C++-Übergabe per Referenz.

Beachten Sie jedoch, dass Strings in C# unveränderlich sind, so dass Sie den String nicht bearbeiten können, ohne einen neuen zu erstellen, auch wenn er per Referenz übergeben wird.

Beachten Sie auch, dass Sie in C# ein Argument nicht als "const" übergeben können, unabhängig davon, ob es sich um einen Werttyp oder einen Referenztyp handelt.

1voto

Jesse C. Slicer Punkte 19426

Während diese in der Tat in einem semantischen Sinne äquivalent sind (d.h. der Code macht etwas mit einer Zeichenkette), hält C#, wie Java, Zeiger komplett aus dem alltäglichen Gebrauch heraus und verbannt sie in Bereiche wie Übergänge zu nativen OS-Funktionen - selbst dann gibt es Framework-Klassen, die diese schön verpacken, wie SafeFileHandle.

Lange Rede, kurzer Sinn: Machen Sie sich nicht die Mühe, über Zeiger in C# nachzudenken.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X