C# 如何从另一个类访问form1变量?

C# 如何从另一个类访问form1变量?,c#,winforms,C#,Winforms,如何从其他类访问form1字符串变量 public partial class Form1: Form { public Form1() { InitializeComponent(); } public string deva = "123"; //button private void button8_Click(object sender, EventArgs e) { d

如何从其他类访问form1字符串变量

 public partial class Form1: Form
 {  
     public Form1()
     {
         InitializeComponent();
     }

     public string deva = "123";

     //button
     private void button8_Click(object sender, EventArgs e)
     {
         deva = "456";
     }

     private void button9_Click(object sender, EventArgs e)
     {
         Other ks = new Other();
         ks.test_me();
     }
}

public class Other: Form1
{
    //trying to access Form1 variable.
    public void test_me()
    {
        Form1 fm = new Form1();
        MessageBox.Show(fm.deva);
        //deva is 123 but not 456. 
        //I clicked on button and values changes it form1 however from here it assigns just default value
    }

//
//Does creating a new form1 will reset its values?
//Somebody please help me. how to solve this issue.
}

将变量设置为静态。直接使用类而不是对象访问它

public static string deva = "123";

public void test_me()
 {
     //Form1 fm = new Form1();
     MessageBox.Show(Form1.deva);

 }

默认值为每个新实例设置一个值 如果要保留最后一个值,请创建一个
static
属性

 public static string deva = "123";

回答标题问题。
阅读Jon Skeet的评论,了解您的方法不起作用的原因

如果您想访问另一个实例的变量,那么您需要以某种方式引用该实例

Other的构造函数中单向传递它

public class Other: Form1
{
    private readonly Form1 _Form1;

    public Other(Form1 form1)
    {
        _Form1 = form1;
    }

    public void test_me()
    {
        MessageBox.Show(_Form1.deva);
    }
}
public class Form1
{
    private void button9_Click(object sender, EventArgs e)
    {
        Other ks = new Other(this);
        ks.test_me();
    } 
}
然后在此处创建
Other的新实例
pass您的
Form1的实例
ti
Other的构造函数

public class Other: Form1
{
    private readonly Form1 _Form1;

    public Other(Form1 form1)
    {
        _Form1 = form1;
    }

    public void test_me()
    {
        MessageBox.Show(_Form1.deva);
    }
}
public class Form1
{
    private void button9_Click(object sender, EventArgs e)
    {
        Other ks = new Other(this);
        ks.test_me();
    } 
}
不需要从form1继承,请通过构造函数传递对象

public class Other { 
Form1 obj = null;
public Other(Form1 object) 
{
  this obj  = object;
}
public void test_me()
{       
    MessageBox.Show(obj.deva);   

 }
}

是的,它将具有默认值-因为您正在创建
Form1
的新实例。不会有与
Form1
的任何其他实例关联的值。面向对象编程的一半要点是对象具有状态。。。两个不同的对象具有独立的状态,因此无法通过创建不同的对象来获取一个对象的状态。在这种情况下,由于您“处于”一个
Form1
的实例中(因为
Other
继承自
Form1
),您可能只需要
MessageBox.Show(deva),正在访问此实例的状态。您的目标是什么?在另一个类中访问它?或者在同一个类中显示它,就像您尝试在内部按钮9\u单击一样?谢谢大家。我本可以早点问这个问题的。我花了好几个小时试图解决这个问题。现在我感觉没有压力了。谢谢你的回答。谢谢你的回答。谢谢你的回答。