C# 是否可以有两个互相访问的通道';s字段而不进行静态设置?

C# 是否可以有两个互相访问的通道';s字段而不进行静态设置?,c#,class,field,instance,C#,Class,Field,Instance,如果我的问题让人困惑,对不起。这是一个我正在努力实现的例子 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 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;
    }
}
接下来,在创建父对象时,将一个类创建为另一个的子对象:

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;
    }
}

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

首先,删除初始化依赖项并在以后设置属性:

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;
    }
}
接下来,在创建父对象时,将一个类创建为另一个的子对象:

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;
    }
}

如果您只需要将实例“分组”在一起以相互访问,我建议您使用这些方法

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();
    }
}

如果您只需要将实例“分组”在一起以相互访问,我建议您使用这些方法

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();
    }
}

是否需要将它们传递给构造函数?或者,您可以在实例化属性后设置它们吗?不需要将int值传递到构造函数中。我指的是Class1和Class2的实例,很抱歉造成混淆。我不知道您想做什么,但您所采用的方法并不推荐。我认为您正在展示一个简化的示例来问这个问题,但是您可能只需要使用包含Class1和Class2实例的第三个类。它们是否需要传递到构造函数中?或者,您可以在实例化属性后设置它们吗?不需要将int值传递到构造函数中。我指的是Class1和Class2的实例,很抱歉造成混淆。我不知道您想做什么,但您所采用的方法并不推荐。我认为您正在展示一个简化的示例来提问,但您可能只需要使用包含Class1和Class2实例的第三个类。第一个解决方案适用于我的问题。目前没有问题。谢谢。第一个解决方案解决了我的问题。目前没有问题。谢谢