
Kloar
Ich konvertiere ein C++-Programm in C#, aber dieser Teil verwirrt mich. Was bedeutet zurückgeben *das bedeutet?
template< EDemoCommands msgType, typename PB_OBJECT_TYPE >
class CDemoMessagePB : public IDemoMessage, public PB_OBJECT_TYPE
{
(...)
virtual ::google::protobuf::Message& GetProtoMsg() { return *this; }
}
Wie würde es in C# übersetzen?
this
bedeutet Zeiger auf das Objekt, also *this
ist ein Objekt. Sie geben also ein Objekt zurück, dh *this
gibt eine Referenz auf das Objekt zurück.
Achten Sie darauf, wenn Sie versuchen, zu verwenden return *this;
auf eine Funktion, deren Rückgabetyp ist Type
und nicht Type&
, C++ versucht, eine Kopie des Objekts zu erstellen und ruft dann sofort den Destruktor auf, normalerweise nicht das beabsichtigte Verhalten. Der Rückgabetyp sollte also wie in Ihrem Beispiel eine Referenz sein.

See
In Ihrem speziellen Fall geben Sie die Referenz auf ‘this’ zurück, da der Rückgabetyp der Funktion eine Referenz (&) ist.
Apropos Größe des zurückgegebenen Speichers, es ist dasselbe wie
virtual ::google::protobuf::Message* GetProtoMsg() { return this; }
Aber die Verwendung zur Anrufzeit unterscheidet sich.
Zum Zeitpunkt des Aufrufs rufen Sie den Rückgabewert der Funktion auf, indem Sie Folgendes speichern:
Message& m = GetProtoMsg();
Mit einem Zeiger können wir direkt auf den Wert zugreifen, der in der Variablen gespeichert ist, auf die er zeigt. Dazu müssen wir dem Bezeichner des Zeigers einfach ein Sternchen voranstellen dereference
die als fungiertOperator und das kann wörtlich übersetzt werden in “Wert, auf den gezeigt wird

Benutzer-Avatar
Josef Pl this
Sie geben nur einen Verweis auf das Objekt zurück.
ist ein Zeiger und Sie dereferenzieren ihn. return this;
Es wird in C# übersetzt

Benutzer-Avatar
bash.d this
Wie in C#
ist ein impliziter Zeiger auf das Objekt, das Sie gerade verwenden. &
In Ihrem speziellen Fall, da Sie eine Referenz zurückgeben *this
zum Objekt müssen Sie verwenden
wenn Sie das Objekt zurückgeben möchten, an dem Sie gerade arbeiten.this
Vergessen Sie nicht, dass eine Referenz die Variable selbst oder im Falle eines Zeigers (*this
), das Objekt zeigte auf (this
), aber nicht der Zeiger (
10128200cookie-checkWas bedeutet ‘return *this’ in C++?yes