我有一个像这样的 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
最佳答案
我不得不说你不能这样做。我知道您想避免获得没有 B
的 A
,并防止获得没有 A
的 B
。
我建议使用带有私有(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/