我有这样的代码:
class First
{
public int a { get; set; }
public int b { get; set; }
public int c = 2;
public _second;
public First()
{
_second = new Second(c);
this.a = _second.a;
this.b = _second.b;
}
}
class Second
{
public int a;
public int b;
public Second(int c)
{
if(c == 0)
{
a = 1;
b = 2;
}
else
{
a = -1;
b = -2;
}
}
}
如何将a
和b
从First
类传递到第二个类,然后直接从第二个类中使用static
设置其值为First
作为{{1}中的声明}。class。
我试过这个:
class First
{
public int a;
public int b;
public int c = 2;
public _second;
public First()
{
_second = new Second(a, b, c);
}
}
class Second
{
public Second(int a, int b, int c)
{
if(c == 0)
{
a = 1;
b = 2;
}
else
{
a = -1;
b = -2;
}
}
}
但它没有完成这项工作。
答案 0 :(得分:2)
您可以在Second类中添加一个构造函数,该构造函数接收First的实例并更新传递的实例的公共变量
public class Second
{
public Second(int a, int b, int c)
{
// old constructor if still needed
...
}
public Second(First f)
{
int sign = f.c == 0 ? 1 : -1;
f.a = 1 * sign;
f.b = 2 * sign;
}
}
顺便说一句,我建议使用属性而不是公共场所。
public class First
{
public int a {get;set;}
public int b {get;set;}
public int c {get;set;} = 2;
public Second _second {get;set;}
public First()
{
_second = new Second(this);
}
}
<强>更新强>
查看您的图像很清楚您的问题的根源是什么。您正在 Forma 构造函数中接收Form类实例。您需要接收像
public Forma(Main form, int modulID)
{
.....
}
基类表单不了解自定义表单类中定义的方法。或者,你仍然可以收到一个Form实例,但你需要添加类似的东西
public Forma(Form form, int modulID)
{
Main m = form as Main;
if(m != null)
m.helpWindow = new Help(modulID);
}
.....
}
答案 1 :(得分:0)
您可以将字段作为ref
传递,这意味着您将引用传递给作为参数传递的字段而不是值。这意味着对Second
构造函数内的字段的更改将反映在First
类
class First
{
public int a;
public int b;
public int c = 2;
public Second _second;
public First()
{
_second = new Second(ref a, ref b, c);
}
}
class Second
{
public Second(ref int a, ref int b, int c)
{
if (c == 0)
{
a = 1;
b = 2;
}
else
{
a = -1;
b = -2;
}
}
}
您可以将ref
传递给任何方法而不仅仅是构造函数。您应该阅读有关此主题的更多信息,例如here
答案 2 :(得分:0)
我用$noaccess
完成了它。
Interface