从另一个新创建的类访问类变量

时间:2018-02-25 18:21:33

标签: c#

我有这样的代码:

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

如何将abFirst类传递到第二个类,然后直接从第二个类中使用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;
        }
    }
}

但它没有完成这项工作。

3 个答案:

答案 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类实例。您需要接收像

这样的Main实例
 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