12

C++ プログラムを C# に変換していますが、この部分で混乱しています。return *this とはどういう意味ですか?

template< EDemoCommands msgType, typename PB_OBJECT_TYPE >
class CDemoMessagePB : public IDemoMessage, public PB_OBJECT_TYPE
{
    (...)
    virtual ::google::protobuf::Message& GetProtoMsg()  { return *this; }
}

C# にどのように変換されますか?

4

6 に答える 6

21

thisオブジェクトへのポインタを意味するので*this、オブジェクトです。したがって、オブジェクトを返します。つまり、*thisオブジェクトへの参照を返します。

于 2013-08-10T13:52:56.590 に答える
3

特定のケースでは、関数の戻り値の型が参照 (&) であるため、「this」への参照を返しています。

返されるメモリのサイズについて言えば、

virtual ::google::protobuf::Message* GetProtoMsg()  { return this; }

ただし、通話時の使い方は異なります。

呼び出し時に、次のような方法で関数の戻り値をストアします。

Message& m = GetProtoMsg();
于 2013-08-10T13:52:43.917 に答える
2

ポインタを使用すると、ポインタが指す変数に格納されている値に直接アクセスできます。これを行うには、ポインターの識別子の前にアスタリスク (*) を付ける必要があります。これは演算子として機能し、文字どおり「が指す値dereference」に変換できます。

于 2013-08-10T13:54:37.147 に答える
2

オブジェクトへの参照を返すだけです。thisはポインターであり、それを逆参照しています。

return this;プリミティブを扱っていない場合は、C# に変換されます。

于 2013-08-10T13:50:44.393 に答える
1

Like in C#thisは、現在使用しているオブジェクトへの暗黙的なポインターです。
特定のケースでは、オブジェクトへの参照を返すときに、現在作業中のオブジェクトを返す場合&は使用する必要があります。 参照は変数自体を取ることを忘れないでください。ポインタ ( ) の場合は、ポインタ ( ) ではなく、指すオブジェクト( ) を取ります。*this
this*thisthis

于 2013-08-10T13:54:48.553 に答える