LinkedList에 액세스하는 방법을 정확히 알지 못하는 이유가 그것이 작동하지 않는 이유를 말하기 어렵습니다.
당신이 가진 것을 살펴 보겠습니다. 양식의 인스턴스 변수 인 LinkedList가 있습니다. 이 LinkedList는 인스턴스 변수이므로 양식의 인스턴스와 연결됩니다.
아래의 예는, 하지 작업이 시도하기 때문에 정적에 액세스하는 것입니다 :
public class MyForm : Form
{
public LinkedList<string> _list = new LinkedList<string>();
}
public class MySecondForm : Form
{
public void Window_Loaded(object sender, EventArgs e)
{
MyForm._list.AddFirst("This doesn't work");
//WRONG! list is an instance variable we are trying to access statically.
}
}
그래서 우리는이 작동하지 않습니다 볼 수 있습니다. 이 기능을 사용하려면 몇 가지 옵션이 있습니다. 우선, 하나의 매우 나쁜 해결책은 실제로 list
을 정적으로 만드는 것입니다. 이 옵션을 사용하지 마십시오. 이것은 동시성 문제에 대한 문을 열어 아마도 강력한 참조가 누출 될 수 있습니다. 일반적으로 통계 (예 : 싱글 톤)를 사용하면 이러한 이유로 데이터를 전달하지 않을 것입니다. 싱글 톤 패턴은 시간과 장소가 있지만, 그렇게 쉽게 피할 수 있기 때문에 이것이라고 생각하지 않습니다.
좋아요, 우리가 나쁜 해결책을 얻었으므로 몇 가지 좋은 것들을 살펴 봅시다.
MySecondForm
에 목록을 설정하십시오. 이를위한 몇 가지 옵션이 있습니다. 생성자, 속성 또는 메서드입니다. 예 :
public class MyForm : Form
{
private LinkedList<string> _list = new LinkedList<string>();
public void Button1_Click(object sender, EventArgs e)
{
var secondForm = new MySecondForm();
secondForm.SetList(_list);
secondForm.ShowDialog();
MessageBox.Show(_list.First.Value);
}
}
public class MySecondForm : Form
{
private LinkedList<string> _list;
public void Window_Loaded(object sender, EventArgs e)
{
this._list.AddFirst("This will work");
}
public void SetList(LinkedList<string> list)
{
_list = list;
}
}
가능한 해결책은 다음과 같습니다. 생성자는 Billy과 같은 또 다른 가능한 솔루션입니다.
LinkedList
이 참조 유형이기 때문에 MySecondForm
인스턴스에서 변경 한 내용은 MyForm
의 연결 목록에 반영됩니다.
다른 창에서 링크 된 목록에 어떻게 액세스하려고합니까? LinkedList는 인스턴스 변수입니다. 연결된 목록을 새 창에 전달하거나 전체 창을 전달해야합니다. 정적으로 액세스하면 작동하지 않습니다. – vcsjones