C# - ref this(引用自己)

时间:2017-07-02 13:25:59

标签: c# reference this

假设我有一个C ++代码:

class A {
    int x = 20;

    void Interact(A* Other) {
        if (x % 2 == 0) { Other->x++; x /= 2; } //some advanced operation
    }
public:
    void MakeInteraction(A* Other) {
        Interact(Other);
        Other->Interact(this);
    }
};

int main() {
    A a, b;
    a.MakeInteraction(&b);
}

问题是,如果我想在C#中做类似的东西,我遇到了障碍 - 当然我不需要使用指针,但我不能使用对this对象的引用:

class A
{
    int x = 20;
    void Interact(ref A Other)
    {
        if (x % 2 == 0) { Other.x++; x /= 2; }
    }
    public void MakeInteraction(ref A Other)
    {
        Interact(ref Other); //works
        Other.Interact(ref this); //doesn't work
        Other.Interact(this); //still doesn't work
        A a = this; 
        Other.Interact(ref a);
        this = a; //REALLY? THIS DOESN'T WORK TOO?!
    }
}

我很生气,因为我认为C#纠正了C ++的缺陷,留下了与最初的C ++一样多的选项,减去了指针。现在看来,从C ++转换到C#需要改变一种思考方式......再次。

1 个答案:

答案 0 :(得分:6)

您不需要在参数声明中使用^\s*@。对于像ref这样的引用类型,声明为class A的参数将导致C#传递对象的引用。

C#中声明为A other的参数与C ++中的A other类似。

C#中声明为A* other的参数与C ++中的ref A other类似。

A** other