假设我有一个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#需要改变一种思考方式......再次。
答案 0 :(得分:6)
您不需要在参数声明中使用^\s*@
。对于像ref
这样的引用类型,声明为class A
的参数将导致C#传递对象的引用。
C#中声明为A other
的参数与C ++中的A other
类似。
C#中声明为A* other
的参数与C ++中的ref A other
类似。
A** other