C# 从其他类获取公共int的值

C# 从其他类获取公共int的值,c#,winforms,C#,Winforms,在ClassTest中有一个按钮单击事件,我想将d_testNumber的值设置为3。然后在类2test中,我希望能够进行if测试,并且if d_testNumber显示一个消息框。我的问题是,在类2test中,d_testNumber始终为0。有人能告诉我如何从class 1test d_testNumber到class 2test得到值吗 这是在课堂上进行的1测试: public int d_testNumber = 0; 类1测试中的方法: void miEditCopay_Click(

在ClassTest中有一个按钮单击事件,我想将d_testNumber的值设置为3。然后在类2test中,我希望能够进行if测试,并且if d_testNumber显示一个消息框。我的问题是,在类2test中,d_testNumber始终为0。有人能告诉我如何从class 1test d_testNumber到class 2test得到值吗

这是在课堂上进行的
1测试

public int d_testNumber = 0;
类1测试中的方法:

void miEditCopay_Click(object sender, Telerik.Windows.RadRoutedEventArgs e)
{
    d_testNumber = 3;
}

这是2级测试:

public int d_testNumber;
public void HelloMessage();

if (d_testNumber == 3)
{
      messagebox.show('test worked');
}
类2test中的方法:

public int d_testNumber;
public void HelloMessage();

if (d_testNumber == 3)
{
      messagebox.show('test worked');
}

也许您希望d_testNumber是静态的,这样两个类都可以轻松访问它

在1测试中:

public static int d_testNumber;
//rest of code the same
在2test中:

if (1test.d_testNumber == 3)
{
    //code
}

(假设两个类都在同一个项目/命名空间中,如果不是,则可能需要顶部的引用/使用语句)

如果要使用类1中定义的相同值,则有3个选项

  • 首先将变量设为静态
  • 如果不想使其成为静态,则需要将该值传递给另一个类
  • 示例1:

    public static int d_testNumber = 0;
    if (Class1test.d_testNumber == 3)
    {
          //your code
    }
    

    在声明中使用
    static

        public static int d_testNumber = 0;
    
    如果它是类上的公共实例属性,如下所示:

    public Class Alpha
    {
      public int DTestNumber ;
    }
    
    public Class Alpha
    {
      public static int DTestNumber ;
    }
    
    public class Bravo
    {
      public void SomeMethod()
      {
        if ( Alpha.DTestNumber == 3 )
        {
          messagebox.Show('test worked') ;
        }
        return ;
      }
    
    然后,另一个类需要一个对另一个类的适当实例的引用来检查它。如何获得该参考取决于您和您的程序设计。下面是一个例子:

    public class Bravo
    {
      public void SomeMethod()
      {
        Alpha instance = GetAnInstanceOfAlpha() ; // might be passed as a parameter
        if ( instance.DTestNumber == 3 )
        {
          messagebox.Show('test worked') ;
        }
        return ;
      }
    
    如果它是类上的公共静态属性,如下所示:

    public Class Alpha
    {
      public int DTestNumber ;
    }
    
    public Class Alpha
    {
      public static int DTestNumber ;
    }
    
    public class Bravo
    {
      public void SomeMethod()
      {
        if ( Alpha.DTestNumber == 3 )
        {
          messagebox.Show('test worked') ;
        }
        return ;
      }
    
    然后在另一节课上,你可以做这样的事情:

    public Class Alpha
    {
      public int DTestNumber ;
    }
    
    public Class Alpha
    {
      public static int DTestNumber ;
    }
    
    public class Bravo
    {
      public void SomeMethod()
      {
        if ( Alpha.DTestNumber == 3 )
        {
          messagebox.Show('test worked') ;
        }
        return ;
      }
    
    请注意,相对于应用程序域和类而言,静态成员是单例的(注意:静态是每个类的属性,而不是每个实例)。此外,如果您的应用程序是多线程的(几乎可以肯定是windows程序),那么对静态成员所做的任何更改都是有保证的竞争条件,除非您通过许多可用的同步原语(例如,
    lock
    语句)尽力序列化访问

    制作一些优秀的自学书籍。如果您是编程新手,请浏览并获取他们的(是的,它确实使用Python,但对于大多数语言来说,编程技能与所使用的语言无关)

    如果您已经了解一些编程知识,但对C#还是新手,那么请获取一份


    您必须进一步指定。两个类中都有一个d_testnumber字段,2test类将使用自己的变量

    如果在某处有一个名为2testObject的2test对象,则可以执行以下操作:

    void miEditCopay_Click(object sender, Telerik.Windows.RadRoutedEventArgs e)
    {
        2testObject.d_testNumber = 3;
    }
    

    并将2testObject传递给HelloMessage()方法

    你应该读一本基本的c#书,在你开始编写代码之前它会对你有很大帮助。我现在正在读一本书,只是想做一个简单的应用为什么对一个新手投了反对票?他展示了他的作品是正确的?为什么不把他放在正确的方向上呢?我建议你继续阅读这本书或教程,这些材料肯定会指导你这么做。a你上面写的很多代码都不会编译…例如,MessageBox.Show的代码都是小写的,你传递给它的字符串用单引号括起来,等等。最好将来你复制你在编译器中尝试的代码。如果,有可能,这是你在编译器中写的代码,你需要检查它。我同意你的观点完整地回答,但肯定OP不会理解你的意思。他/她看起来非常初学者。我最好引导他/她继续学习教程,而不是把一些超出他/她的知识范围的东西强加给他/她。