У меня очень странная проблема, когда я создаю список некоторых объектов в одном классе, а затем пытаюсь получить к нему доступ в другом классе, но он становится пустым в другом классе:
Мой первый класс, где я заполняю список:
namespace dragdrop
{
struct BR
{
private string var;
public string Var
{
get { return var; }
set { var = value; }
}
private string equalsTo;
public string EqualsTo
{
get { return equalsTo; }
set { equalsTo = value; }
}
private string output;
public string Output
{
get { return output; }
set { output = value; }
}
private string els;
public string Els
{
get { return els; }
set { els = value; }
}
private string elsOutput;
public string ElsOutput
{
get { return elsOutput; }
set { elsOutput = value; }
}
}
public partial class Form1 : Form
{
//******************
private List<BR> list = new List<BR>(); //This is the list!
//******************
internal List<BR> List
{
get { return list; }
set { list = value; }
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string[] vars = new string[] { "Name", "Gender", "Age", "Address", "email" };
comboBox1.DataSource = vars;
}
private void button1_Click(object sender, EventArgs e)
{
BR b = new BR();
b.Var = comboBox1.SelectedItem.ToString();
b.EqualsTo = textBox1.Text;
b.Output = textBox2.Text;
list.Add(b);
//*****************
textBox1.Text = List.Count.ToString(); //This gives the correct count value!
//*****************
//this.Close();
}
}
}
Я обращаюсь к нему во втором классе, например:
namespace dragdrop
{
public partial class Ribbon1
{
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
}
private void button1_Click(object sender, RibbonControlEventArgs e)
{
Form1 form = new Form1();
List<BR> l = form.List; ;
//*******************
MessageBox.Show(form.List.Count.ToString()); //This strangely gives count 0!
//*******************
}
}
}
Я даже пытался сделать все общедоступным в первом классе, но независимо от того, что я делаю, я всегда получаю пустой список во втором классе.
2 ответа
Между Form1
и Ribbon1
нет никакой связи, как тогда можно получить доступ к экземпляру другого?
С этим:
Form1 form = new Form1(); // new instance of Form1
List<BR> l = form.List; ; // of course the list is empty in a new instance!
Вы никогда не сможете получить доступ к значениям из другого экземпляра Form1
.
Поскольку я понятия не имею, как связаны ваши классы, я не могу дать вам больше совета, чем взглянуть на это хороший обзор объектно-ориентированных отношений. Вы должны как-то соединить их, чтобы это работало, я бы очень рекомендовал композицию // агрегацию (одно и то же, разные школы).
Все, что мне нужно было сделать, это сделать список статическим членом первого класса, что решило проблему наличия другого значения, когда я пытался создать новый экземпляр Form1 в классе Ribbon1.
private static List<BR> list = new List<BR>();
Form1
, теперь все они будут использовать один и тот же List
. Иногда это то, что вы хотите, но часто это не так. Так что это может работать в этом случае, но это не очень хорошее решение.
Form1
, что произойдет, если у вас одновременно открыто несколько экземпляров Word?
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.
Form1
и получаете доступ к списку без инициализации