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?
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?
Es gibt Zeiger hinter den Kulissen in C#, obwohl sie mehr wie C++'s intelligente Zeiger sind, so dass die rohen Zeiger gekapselt sind. Ein char* ist nicht wirklich dasselbe wie System.String, da ein Zeiger auf ein char normalerweise den Anfang eines Zeichenarrays bedeutet, und ein C#-String ist ein Objekt mit einem Längenfeld et ein Zeichen-Array. Der Zeiger zeigt auf die äußere Struktur, die auf etwas wie eine wchar_t Array, so gibt es einige Umleitung mit einem C#-String und breitere Zeichen für Unicode-Unterstützung.
Nein. In C# (und allen anderen .NET-Sprachen) ist der String ein Datentyp erster Klasse. Er ist nicht einfach ein Array von Zeichen. Sie können zwischen ihnen hin und her konvertieren, aber sie verhalten sich nicht gleich. Es gibt eine Reihe von Methoden zur Stringmanipulation (z. B. "Substring()" und "StartsWith"), die der String-Klasse zur Verfügung stehen, die aber nicht für Arrays im Allgemeinen gelten, von denen ein Array von Zeichen einfach eine Instanz ist.
Bei Werttypen (int, double usw.) erhält die Funktion eine Kopie des Wertes. Bei anderen Objekten ist es eine Referenz, die auf das ursprüngliche Objekt verweist.
Strings sind etwas Besonderes, weil sie unveränderlich sind. Technisch gesehen bedeutet dies, dass die Referenz weitergegeben wird, aber in der Praxis verhält sie sich ziemlich genau wie ein Wertetyp.
Sie können Werttypen dazu zwingen, eine Referenz zu übergeben, indem Sie die ref
Stichwort:
public void Foo(ref int value) { value = 12 }
public void Bar()
{
int val = 3;
Foo(ref val);
// val == 12
}
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.