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 回答
18

请注意,如果您尝试return *this;在返回类型为Typeand not的函数上使用Type&,C++ 将尝试制作对象的副本,然后立即调用析构函数,通常不是预期的行为。因此,返回类型应该是您的示例中的引用。

于 2014-10-28T17:32:38.520 回答
3

在您的特定情况下,您将返回对“this”的引用,因为函数的返回类型是引用(&)。

说到返回内存的大小,和

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

但是调用时的用法不同。

在调用时,您将通过以下方式调用 store 函数的返回值:

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

您只是返回对该对象的引用。this是一个指针,你正在取消引用它。

return this;如果您不处理原语,它会转换为 C# 。

于 2013-08-10T13:50:44.393 回答
2

使用指针,我们可以直接访问存储在它指向的变量中的值。为此,我们只需在指针的标识符前面加上一个星号 (*),它充当dereference操作符,可以直译为“所指向的值”。

于 2013-08-10T13:54:37.147 回答
1

就像在 C#this中一样,是指向您当前使用的对象的隐式指针。
在您的特定情况下,当您返回对对象的引用时,如果要返回当前正在处理&的对象,则必须使用。 不要忘记引用获取变量本身,或者在指针 ( ) 的情况下,对象指向 ( ),而不是指针 ( )。*this
this*thisthis

于 2013-08-10T13:54:48.553 回答