从另一个类中获取public int的值

时间:2013-08-16 17:27:43

标签: c# winforms

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

这是在课程1test中:

public int d_testNumber = 0;

1级测试中的方法:

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

这是在2级测试中:

public int d_testNumber;

第2类中的方法:

public void HelloMessage();

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

5 个答案:

答案 0 :(得分:3)

如果它是类上的公共实例属性,请执行以下操作:

public Class Alpha
{
  public int DTestNumber ;
}

然后另一个类需要引用到另一个类的相应实例才能检查它。如何获得该参考取决于您和您的程序的设计。这是一个例子:

public class Bravo
{
  public void SomeMethod()
  {
    Alpha instance = GetAnInstanceOfAlpha() ; // might be passed as a parameter
    if ( instance.DTestNumber == 3 )
    {
      messagebox.Show('test worked') ;
    }
    return ;
  }

如果它是类上的公共 static 属性,请执行以下操作:

public Class Alpha
{
  public static int DTestNumber ;
}

然后在另一堂课中你可以这样做:

public class Bravo
{
  public void SomeMethod()
  {
    if ( Alpha.DTestNumber == 3 )
    {
      messagebox.Show('test worked') ;
    }
    return ;
  }

请注意,静态成员是关于应用程序域和类的单例(注意:静态是每类属性,而不是 per-intance )。此外,如果您的应用程序是多线程的(几乎可以肯定是一个Windows程序),对静态成员所做的任何更改都是有保证的竞争条件,除非您通过许多可用的同步原语(例如,{ {1}}声明)。

Head First Labs制作了一些优秀的自学书籍。如果您不熟悉编程,请转到Head First Labs并获取 Head First Programming: A learner's guide to programming using the Python language (是的,它确实使用Python,但对于大多数语言,编程技巧是与使用的语言无关。

如果您已经对编程有所了解,但对C#不熟悉,那么请获取 Head First C#: A Learner's Guide to Real-World Programming with C#, XAML, and .NET 的副本。强烈推荐。

Head First Programming

Head First C#

答案 1 :(得分:1)

如果你想使用类1中定义的相同值,那么你有3个选项

  1. 首先使变量成为静态
  2. 如果您不想将其设为静态,则需要将值传递给其他类
  3. 1的例子:

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

答案 2 :(得分:1)

在声明中使用static

    public static int d_testNumber = 0;

答案 3 :(得分:1)

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

如果你有一个名为2testObject的2test对象,你可以这样做:

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

将2testObject传递给HelloMessage()方法

答案 4 :(得分:0)

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

in 1test:

public static int d_testNumber;
//rest of code the same

in 2test:

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

(假设两个类都在同一个项目/命名空间中,如果没有,你可能需要在顶部使用reference / using语句)