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) {

通常,在WPF和C中,委托是在两个窗体/窗口之间共享变量的好方法吗?我知道在两个窗口之间传递函数/变量的方法有很多,我想知道是否有更好的方法,代码更少,更麻烦

多谢各位

例如:

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”还不够,类会话是一个共享对象。