【问题标题】:OOP - Message Passing in C#OOP - C# 中的消息传递
【发布时间】:2009-07-27 16:07:17
【问题描述】:

C#中OOP概念'消息传递'的例子是什么(调用方法/传递参数/触发事件/处理事件/???),为什么称为消息传递?

【问题讨论】:

  • 嗯?这是一个真正的问题吗?因为你自己回答了。基本上是因为它是对象通信的方式;所以它被称为“消息传递”。
  • 是的。我发现了这个概念。我是来验证的。

标签: c# oop message-passing


【解决方案1】:

方法调用。

它被称为消息传递,以将其与“调用函数”的命令式概念区分开来,并强化接收对象决定做什么的想法。在呼叫站点上,您只需告诉接收者“消息”。

一个例子是类中的抽象方法,并在子类中实现;或接口方法的实现。当你打电话时GetEnumerator() 通过IEnumerable 类型的变量,你不知道在调用站点实际应该执行什么代码。

【讨论】:

    【解决方案2】:

    称为消息传递,以区别于传递参数。

    传递消息的一个主要好处是您可以更改消息的内容,而无需更改接收消息的方法的签名。

    另一个是多个方法可能需要相同的信息,因此可以在同一个地方定义和更改。

    【讨论】:

      【解决方案3】:

      有些人觉得消息传递和方法调用是不一样的。我们可以互换使用该术语,但含义很微妙。

      在 smalltalk 中,消息传递受运行时限制,并且对象有办法确定它是否可以处理未明确定义为方法的消息。 Ruby 将此方法称为_missing。特别是 C++ 中的方法在编译时绑定,无法动态添加处理更多消息的方法。 C# 4.0 有一个混合,一旦你开始抛出动态。

      还有另一种消息传递流派,Erlang 认为所有消息参数都需要在状态中解耦。也就是说,它们要么是不可变的,要么是副本。

      【讨论】:

      • 我听说过后一种定义——消息是解耦的方法调用,可以多线程或在机器外处理。在 C++ 和 Java 等语言中,不存在此功能,因此这些术语往往是同义词。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      相关资源
      最近更新 更多