我有一个基本的问题。我总共有两节课。
我在一个类中有一些方法。骨架结构如此:
第一堂课叫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
。但是,我无法在其他方法中使用此实例,例如newList
或AppendAdditionalMenuItems()
。
我想在这两种方法中访问Menu_MyCustomItemClicked()
,并调用newList
或newList.FirstList[index]
之类的内容。
这个抽象类的工作方式是它总是先调用newList.SecondList[index]
,我觉得这些信息非常重要。
这是范围问题吗?我该如何解决?
答案 0 :(得分:1)
您遇到的问题是newList仅在您的SolveInstance方法中定义,这意味着您正确认为它是一个范围问题。将其声明为私有字段,它将可用。我还考虑将SolveInstance更改为构造函数,如果该方法确实总是先调用它。
答案 1 :(得分:1)
一种解决方案可能是在类中使用类范围添加私有变量。添加以下行:
ValueList _valueList;
在方法之外,在方法中使用一个而不是newList。
详细了解范围 http://msdn.microsoft.com/en-us/library/aa691132(v=vs.71).aspx