我试图通过传递一些参数(args1,args2)从类A调用类B的构造函数。我正在使用这样的东西:
public class A
{
private readonly B _b;
public A()
{
_b=new B(TypeA args1,TypeB args2);
}
...
}
public class B
{
public B(TypeA new_args1,TypeB new_args2)
{
...
}
...
}
但是从调试中看到的args1和args2具有我想要发送的正确值,new_args1和new_args2不会改变。我必须使用特定的语法来做到这一点吗?
答案 0 :(得分:2)
我不确定你为什么把args称为B“new”的构造函数。它们是用于实例化该特定对象实例的 参数。
除了您在参数声明中缺少类型这一事实外,您的代码看起来是正确的。 完全是错误的。
public B(new_args1,new_args2)
缺少类型,例如
public B(int new_args1, int new_args2)
鉴于上面的类型假设
_b=new B(42, 24);
会导致B初始化为
public B(int new_args1, int new_args2)
{
// new_args1 has the value 42
// new_args2 has the value 24
}
假设您将这些值分配到B中的某个位置,例如
public class B
{
public int A1 { get; private set; }
public int A2 { get; private set; }
public B(int new_args1, int new_args2)
{
// new_args1 has the value 42
A1 = new_args1;
// new_args2 has the value 24
A2 = new_args2;
}
}
然后
_b.A1
的值为42,
_b.A2
将具有值24
初始化_b。
之后答案 1 :(得分:1)
首先让我们修复语法:
public class A
{
private readonly B _b;
public A(TypeA args1, TypeB args2)
{
_b = new B(args1, args2);
}
}
public class B
{
public B(TypeA new_args1, TypeB new_args2)
{
}
}
请注意,参数类型必须完全匹配,否则可能会调用另一个具有匹配签名的构造函数。假设你在B
上有两个构造函数,在这种情况下第一个被调用而第二个没有:
public class B
{
public B(TypeA new_args1, TypeB new_args2)
{
}
public B(TypeA new_args1, TypeC new_args2)
{
}
}
还有一点:在这种情况下,我会推荐DI(依赖注入)。除非构造对象是List
,Dictionary
等原子数据结构,否则在构造函数中构造是一个缺陷。
public class M
{
public void Main(TypeA new_args1, TypeB new_args2)
{
var b = new B(new_args1, new_args2);
var a = new A(b);
}
}
public class A
{
private readonly B _b;
public A(B b)
{
_b = _b;
}
}
public class B
{
public B(TypeA new_args1, TypeB new_args2)
{
}
}
答案 2 :(得分:0)
我能看到你的代码中的错误是你应该用一个paranthesis声明你的A构造函数,即A()并检查它是否有效。除此之外,您的代码看起来绝对正确。