如何在多个实例中维护对象 - C#
How to maintain object in multiple instances - C#
我在主窗口中维护一个对象(父对象)class。该父对象正在传递给另一个对象(objMyClass)。现在,如果我在主窗口中更新父对象,它不会在 objMyClass 对象中反映出来。下面是代码。
using System.Windows;
namespace WpfApp2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public Parent objParent;
public MyClass objMyClass;
public MainWindow()
{
InitializeComponent();
objParent = new Parent();
objMyClass = new MyClass(objParent);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if ((bool)checkPWB.IsChecked)
objParent = new Child1();
else
objParent = new Child2();
objParent.Display();
objMyClass.par.Display();
}
}
public class MyClass
{
public Parent par;
public MyClass(Parent p)
{
par = p;
}
}
public class Parent
{
public virtual void Display()
{
MessageBox.Show("I am Parent");
}
}
public class Child1 : Parent
{
public override void Display()
{
MessageBox.Show("I am Child1");
}
}
public class Child2 : Parent
{
public override void Display()
{
MessageBox.Show("I am Child2");
}
}
}
当我单击该按钮时,我正在创建一个新对象 (Child1) 并将其分配给我的父对象,但它不会反映在 ObjectMyClass 中。
如有任何帮助,我们将不胜感激。
要引用相同的字段,您可以使用 Func<Parent>
,这将 return 字段的当前值:
public class MyClass
{
private Func<Parent> getParent = null;
public Parent par => getParent();
public MyClass(Func<Parent> getParent)
{
this.getParent = getParent;
}
}
并将您的 class 构建为
objMyClass = new MyClass(() => objParent);
这种方式不是自己引用包含参数原始值副本的 Parent
对象(如问题中的代码),此 MyClass
将始终 return objParent
字段的当前值,并且确实反映了对该字段的更改。
或者您可以直接更改 par
属性 而不是更改 objParent
.
我在主窗口中维护一个对象(父对象)class。该父对象正在传递给另一个对象(objMyClass)。现在,如果我在主窗口中更新父对象,它不会在 objMyClass 对象中反映出来。下面是代码。
using System.Windows;
namespace WpfApp2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public Parent objParent;
public MyClass objMyClass;
public MainWindow()
{
InitializeComponent();
objParent = new Parent();
objMyClass = new MyClass(objParent);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if ((bool)checkPWB.IsChecked)
objParent = new Child1();
else
objParent = new Child2();
objParent.Display();
objMyClass.par.Display();
}
}
public class MyClass
{
public Parent par;
public MyClass(Parent p)
{
par = p;
}
}
public class Parent
{
public virtual void Display()
{
MessageBox.Show("I am Parent");
}
}
public class Child1 : Parent
{
public override void Display()
{
MessageBox.Show("I am Child1");
}
}
public class Child2 : Parent
{
public override void Display()
{
MessageBox.Show("I am Child2");
}
}
}
当我单击该按钮时,我正在创建一个新对象 (Child1) 并将其分配给我的父对象,但它不会反映在 ObjectMyClass 中。
如有任何帮助,我们将不胜感激。
要引用相同的字段,您可以使用 Func<Parent>
,这将 return 字段的当前值:
public class MyClass
{
private Func<Parent> getParent = null;
public Parent par => getParent();
public MyClass(Func<Parent> getParent)
{
this.getParent = getParent;
}
}
并将您的 class 构建为
objMyClass = new MyClass(() => objParent);
这种方式不是自己引用包含参数原始值副本的 Parent
对象(如问题中的代码),此 MyClass
将始终 return objParent
字段的当前值,并且确实反映了对该字段的更改。
或者您可以直接更改 par
属性 而不是更改 objParent
.