我将C ++程序转换为C#,但这部分让我感到困惑。什么回报*这意味着什么?
template< EDemoCommands msgType, typename PB_OBJECT_TYPE >
class CDemoMessagePB : public IDemoMessage, public PB_OBJECT_TYPE
{
(...)
virtual ::google::protobuf::Message& GetProtoMsg() { return *this; }
}
它将如何转化为C#?
答案 0 :(得分:15)
this
表示指向对象的指针,因此*this
是一个对象。所以你要返回一个对象,即*this
返回对象的引用。
答案 1 :(得分:10)
请注意,如果您尝试在返回类型为return *this;
而非Type
的函数上使用Type&
,C ++将尝试复制该对象,然后立即调用析构函数,通常不是预期的行为。因此,返回类型应该是您的示例中的引用。
答案 2 :(得分:3)
在您的特定情况下,您将返回对“this”的引用,因为函数的返回类型是引用(&amp;)。
说到返回内存的大小,它与
相同virtual ::google::protobuf::Message* GetProtoMsg() { return this; }
但是通话时的使用情况有所不同。
在通话时,您将通过以下方式调用存储函数的返回值:
Message& m = GetProtoMsg();
答案 3 :(得分:2)
您只是返回对象的引用。 this
是一个指针,您正在取消引用它。
如果您没有处理原语,它会转换为C#return this;
。
答案 4 :(得分:2)
使用指针我们可以直接访问存储在它指向的变量中的值。要做到这一点,我们只需要在指针的标识符前面加上一个星号(*),它用作dereference
运算符,并且可以直接翻译为“ 指向的值”。
答案 5 :(得分:1)
与C#一样this
是指向您当前使用的对象的隐式指针
在您的特定情况下,当您向对象返回引用&
时,如果要返回当前正在处理的对象,则必须使用*this
。
不要忘记引用接受变量本身,或者在指针(this
)的情况下,对象指向(*this
),而不是指针(this
)。