C# 委托是在两个窗口之间共享变量的好方法吗?
通常,在WPF和C中,委托是在两个窗体/窗口之间共享变量的好方法吗?我知道在两个窗口之间传递函数/变量的方法有很多,我想知道是否有更好的方法,代码更少,更麻烦 多谢各位 例如:C# 委托是在两个窗口之间共享变量的好方法吗?,c#,wpf,delegates,C#,Wpf,Delegates,通常,在WPF和C中,委托是在两个窗体/窗口之间共享变量的好方法吗?我知道在两个窗口之间传递函数/变量的方法有很多,我想知道是否有更好的方法,代码更少,更麻烦 多谢各位 例如: internal delegate void getName(String name); internal static event getName evtGetUsername; private void btn1_Click(object sender, RoutedEventArgs e) {
internal delegate void getName(String name);
internal static event getName evtGetUsername;
private void btn1_Click(object sender, RoutedEventArgs e)
{
evtGetUsername(textBox.Text);
}
另一种形式:
public MainWindow()
{
InitializeComponent();
Window2.evtGetUsername += new Window2.getName(Name);
}
public void Name(String name)
{
lstBox.Items.Add(name);
}
?使用普通静态类怎么样
public static class Session {
public static String Name { get; set; }
}
//Window1
public Window1() {
Session.Name = "Window 1 instantiated.";
}
//Window2
public Window2() {
txtControl.Text = Session.Name;
}
这在大多数情况下都有效就我个人而言,我会使用某种形式的依赖注入,并使用它在两个窗口之间有效地共享一个设置类 本质上,两个窗口都注入了相同的类,并且它们都可以在设置类中共享相同的变量 如果您不想使用依赖项注入,请改用单例(有关更多信息,请在谷歌上搜索此项)
我发现这两种方法都很有效。通常,您可以添加一些包装器来将设置持久化到文件中,我建议您使用JSON.NET。这是什么意思?如何使用委托共享变量?通常通过共享状态来共享状态。@CharlesMager从技术上讲,共享对方法的引用就是共享状态;)代表是一种工具,与所有工具一样,他们可以有效或无效地使用。当然,有人能有效地使用代理在窗口之间进行通信吗。是否有人可以无效地使用代理在窗口之间进行通信,也是这样。也可以在不使用代理的情况下进行有效和无效的沟通。让每个人列出他们最喜欢的对象间通信方式,这是一个太宽泛的问题。@CharlesMager我添加了一个example@Servy谢谢你的回答,请看我的编辑,我补充和例子。这是处理代表的好方法吗?顺便说一句,方法不错。但是我认为“静态”还不够OOP。你可以把它放在另一个文件/名称空间/类中,我不明白为什么这个“OOP”还不够,类会话是一个共享对象。