关于C#对象范围

时间:2017-07-05 17:25:11

标签: c# object scope

所以我创建了一个类并在主窗口中实例化一个对象。然后,当我试图在同一个窗口中的按钮中使用该对象时,我不知道如何指示该对象的上下文。我知道这是一个非常基本的问题,但我正在学习,并且还没有能够解决这个问题。

public MainWindow()
{
    InitializeComponent();
    DeltaMotor M2 = new DeltaMotor();
    M2.Card.Set8255();  
    M2.Stop();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    M2.Move(1); // this can't find M2 within the context
}

我知道这是基本的,但非常感谢帮助。

4 个答案:

答案 0 :(得分:4)

正如您所发现的那样,M2对象不在单击处理程序的范围内,因为它是MainWindow构造函数中的局部变量

您可以使M2成为该类的实例变量,并从以下两行中访问它:

private DeltaMotor M2;

public MainWindow()
{
    InitializeComponent();
    M2 = new DeltaMotor();
    M2.Card.Set8255();  
    M2.Stop();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    M2.Move(1);
}

答案 1 :(得分:1)

如果您只是希望在这一个课程中可以访问它,那么

private DeltaMotor M2;
public MainWindow()
{
    InitializeComponent();
    M2 = new DeltaMotor();
    M2.Card.Set8255();  
    M2.Stop();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    M2.Move(1); // this can't find M2 within the context
}

会很好地工作。为了进一步学习,这里有一个关于变量和方法范围的Microsoft参考: https://msdn.microsoft.com/en-us/library/ms973875.aspx

如果您在其他课程中访问M2,那将会非常有用。希望能帮助您入门!

答案 2 :(得分:0)

您可以将M2声明为类属性:

private DeltaMotor M2 { get; set; }

public MainWindow()
{
    InitializeComponent();
    M2 = new DeltaMotor();
    M2.Card.Set8255();  
    M2.Stop();
}

然后从您想要的任何方法访问它:

private void Button_Click(object sender, RoutedEventArgs e)
{
    M2.Move(1); 
}

答案 3 :(得分:0)

您需要在班级创建DeltaMotor的实例成员。

private DeltaMotor _m2;

public MainWindow()
{
    InitializeComponent();
    _m2 = new DeltaMotor();
    _m2.Card.Set8255();  
    _m2.Stop();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    _m2.Move(1);
}