c#班级间沟通的最佳方式

c#班级间沟通的最佳方式,c#,C#,现在我正在编写一个应用程序,我认为必须有一个更好的解决方案来解决我现在正在做的事情 我有一个主窗口,可以处理程序的设置。然后我有更多的类和窗口。例如,语言处理程序类和处理“main函数”所需的用户输入的表单 但是,直到现在,我始终必须将我的主窗口传递给每个此类,因为语言处理程序应该能够更改主窗口的字符串。另一个表单也应该能够将数据传递到主窗口 如果我们想象会有更多的类,并且每个类都需要一个主窗口的副本,这将根据主窗口的“大小”消耗大量资源 那么,这些类之间是否有更好/更有效的通信方式。我建议您使

现在我正在编写一个应用程序,我认为必须有一个更好的解决方案来解决我现在正在做的事情

我有一个主窗口,可以处理程序的设置。然后我有更多的类和窗口。例如,语言处理程序类和处理“main函数”所需的用户输入的表单

但是,直到现在,我始终必须将我的主窗口传递给每个此类,因为语言处理程序应该能够更改主窗口的字符串。另一个表单也应该能够将数据传递到主窗口

如果我们想象会有更多的类,并且每个类都需要一个主窗口的副本,这将根据主窗口的“大小”消耗大量资源


那么,这些类之间是否有更好/更有效的通信方式。

我建议您使用MVVM或MVVM实现。在那里你可以使用他们的信息服务,这是很容易使用的。需要信息的类只需向订户发送一条消息,订户就可以发送所需的所有数据。我认为这是处理通信的最简单的方法。

通常的方法是使用,在.NET中就是这样。简单地说,您的类订阅彼此的事件,并在引发事件时执行操作。如注释中所述,传递引用不会占用大量内存,但会导致代码不同部分之间的紧密耦合-观察者模式解决了这个问题。

除了IVAN给出的ans之外。。如果我们查看的是一个没有所有这些术语的更高级别视图,那么您可能应该创建一个静态类,该类将作为InMemoryStorage服务器,并在其上定义字段以保存信息
这意味着您可以完全控制共享的内容,多个组件可以对其进行更改

此外,您可以定义吸气剂和设置器,并在属性更改时引发事件,以便不同的窗体或窗口(视图)可以订阅更改,并相应地采取行动:

另一个选项是将类视为服务。将它们编码到一个接口,然后使用(也称为控制反转)来构建对象图(你告诉IoC容器你想要一个frmSomething,它将确定它需要什么服务/类,并根据需要实例化它们)

这意味着:

  • 您只需针对接口而不是实现编写代码
  • 您的代码是松散耦合的(您可以将
    OldTranslator
    交换为
    NewTranslator
    ,只要它们都符合相同的接口,除了容器的配置外,无需进行任何更改)
  • 您可以开发高级功能,这些功能依赖于尚未编写的服务,您的代码将被编译
  • 通过更改容器中注册的类/服务,您可以非常轻松地在运行时更改应用程序的工作方式(如果需要)
请查看支持MS的DI容器。这是一个受欢迎的选择,但还有更多


值得注意的是,正如您所说,传递主窗口的“副本”并不是一件坏事——实际上,您只传递了一个指向主窗口的引用(实际上是一个指针)(因为任何比真正的原语更复杂的东西都是引用类型)。这意味着读到的内容几乎没有开销

,并且不必担心传递主表单,因为它是一个引用类型。哇,我应该知道它是作为引用传递的。但我会看看你所有的建议;)“依赖注入(又名控制反转)”不是真的。。。