C# - 实例化一个对象 A,其构造函数接受一个需要引用 A 的对象 B 的参数(如一对一关系)

标签 c#

我有一个像这样的 A 类和 B 类:

public class B {

    private A myA { get; }

    public B(A a) {
        myA = a;
    }
}

public class A {

    private B myB { get; }

    public A(B b) {
        myB = b;
    }
}

我想知道是否可以在一条指令中同时实例化 A 和 B 而不必使用

B b = new B();
A a = new A(b);
b.SetA();

A a = null;
a = new A(new B(a));

我希望能够在一条指令中执行此操作的原因是因为我希望能够像这样在另一个类的构造函数中实例化一个类型 A 的类

public abstract class SuperClass() {

    private A myA { get; }

    public SuperClass(A a) {
        myA = a;
    }
}

public class SpecificClassWithKnownValuesOfA() : SuperClass {

    public SpecificClassWithKnownValuesOfA() : base(/* here I want to use new A(new B(ref of a)) */) { }
}

请注意,B.myA 和 A.myB 是只读属性,因为我不想放置 setter

最佳答案

我不得不说你不能这样做。我知道您想避免获得没有 BA,并防止获得没有 AB

我建议使用带有私有(private)构造函数的工厂模式。

对于 A:

    public class A
    {
        private B _b;
        public A(B b)
        {
            _b = b;
        }
    }

对于 B,不要创建公共(public)构造函数。使用构建器来构建它,因此每次您获得 B 时,总会有一个很好的实例。

    public class B
    {
        private A _a;
        private B() { }

        public (A, B) Init()
        {
            var b = new B();
            _a = new A(b);
            return (_a, b);
        }
    }

要获取它,请调用:

var (a, b) = B.Init();

关于C# - 实例化一个对象 A,其构造函数接受一个需要引用 A 的对象 B 的参数(如一对一关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58766262/

相关文章:

c# - Web 用户控件设置默认值

c# - 有什么方法可以在 SHFB 中导入外部项目或主题文件?

c# - 空传播运算符

c# - 如何加密 user.settings

c# - 什么类型的 photoshop Document.add?

c# - 如何将对象列表转换为二级字典?

C# pdf 到文本转换器

c# - 通过单击按钮将值从 form1 传递到 form2

c# - 如何在 XAML 中复制 'float: right'?

c# - 在 C 中查找事件用户目录的路径