是否可以在不使其中一个成为静态的情况下对彼此的字段进行两次访问?

Is it possible to have two access to each other's fields without making one of static?

抱歉,如果我的问题看起来令人困惑。这是我要实现的目标的示例。

public class Class1
{
    public Class2 class2;
    public int i;

    public Class1(Class2 class2, int i)
    {
        this.class2 = class2;
        this.i = i;
    }
}

public class Class2
{
    public Class1 class1;
    public int i;

    public Class2(Class1 class1, int i)
    {
        this.class1 = class1;
        this.i = i;
    }
}

public class Run1
{
    Class1 c1 = new Class1(c2,1); // Obviously doesn't work. Since it is not declared
    Class2 c2 = new Class2(c1,2);
}

我的目标是让 c1 可以访问 c2.i,c2 可以访问 c1.i

根据您的需要,有几种不同的解决方案。

首先去除初始化依赖,稍后设置属性:

public class Class1
{
    public int i;
    public Class2 class2;

    public Class1(int i)
    {
        this.i = i;
    }
}

public class Class2
{
    public int i;
    public Class1 class1;

    public Class2(int i)
    {
        this.i = i;
    }
}

class Program
{
    static void Main(string[] args)
    {
        var c1 = new Class1(1);
        var c2 = new Class2(2);
        c1.class2 = c2;
        c2.class1 = c1;
    }
}

下一步是在创建父对象时将一个 class 创建为另一个对象的子对象:

public class Class1
{
    public int i;
    public Class2 class2;

    public Class1(int i1, int i2)
    {
        this.i = i1;
        class2 = new Class2(i2, this);
    }
}

public class Class2
{
    public int i;
    public Class1 class1;

    public Class2(int i, Class1 class1)
    {
        this.i = i;
        this.class1 = class1;
    }
}

class Program
{
    static void Main(string[] args)
    {
        var c1 = new Class1(1, 2);
        var c2 = c1.class2;
    }
}

如果您只需要 "group" 将这些实例放在一起以相互访问,我会按照这些思路推荐一些东西。

public class Class1
{
    public int x;
    public Class1(int a)    {x = a;}
}
public class Class2
{
    public int y;
    public Class2(int a)    {y = a;}
}
public class Pair
{
    public Class1 u;
    public Class2 v;
    public Pair(Class1 a_u, Class2 a_v) {u = a_u; v = a_v;}
    public int Function() { return u.x + v.y; }
}
class Program
{
    static void Main(string[] args)
    {
        Pair z = new Pair(new Class1(1), new Class2(2));
        int w = z.Function();
    }
}