从另一个方法调用在一个方法中声明的实例

时间:2014-01-29 15:39:49

标签: c# scope instance

我有一个基本的问题。我总共有两节课。

我在一个类中有一些方法。骨架结构如此:

第一堂课叫EvenBetterValueList(公开):

public override void AppendAdditionalMenuItems(ToolStripDropDown menu){
    // Stuff
}

private void Menu_MyCustomItemClicked(object sender, EventArgs e){
    // Stuff
}

protected override void SolveInstance(IGH_DataAccess DA){
    // firstList and secondList list<string> declaration
    ValueList newList = new ValueList(firstList, secondList);
}

第二个类被称为ValueList(正如你在我的SolveInstance方法中所说的那样。这也是公开的):

骨架是:

    private List<string> _firstList = new List<string>();
    private List<string> _secondList = new List<string>();

    public List<string> FirstList 
    {
        get { return _firstList; }
    }

    public List<string> SecondList
    {
        get { return _secondList; }
    }

    public ValueList(List<string> firstList, List<string> secondList) {
        _firstList.Clear();
        _secondList.Clear();

        // Add vars to global vars

        _firstList.AddRange(firstList);
        _secondList.AddRange(secondList);
    }

我的问题是,在第一课SolveInstance的{​​{1}}中,我能够使用我声明的新实例EvenBetterValueList。但是,我无法在其他方法中使用此实例,例如newListAppendAdditionalMenuItems()

我想在这两种方法中访问Menu_MyCustomItemClicked(),并调用newListnewList.FirstList[index]之类的内容。

这个抽象类的工作方式是它总是先调用newList.SecondList[index],我觉得这些信息非常重要。

这是范围问题吗?我该如何解决?

2 个答案:

答案 0 :(得分:1)

您遇到的问题是newList仅在您的SolveInstance方法中定义,这意味着您正确认为它是一个范围问题。将其声明为私有字段,它将可用。我还考虑将SolveInstance更改为构造函数,如果该方法确实总是先调用它。

答案 1 :(得分:1)

一种解决方案可能是在类中使用类范围添加私有变量。添加以下行:

ValueList _valueList;

在方法之外,在方法中使用一个而不是newList。

详细了解范围 http://msdn.microsoft.com/en-us/library/aa691132(v=vs.71).aspx