extension-methods - 扩展方法是访问者模式的一个例子吗?

标签 extension-methods visitor-pattern

这两个概念有一个共同点,那就是扩展操作并在单独的类中的其他地方定义它。但我认为扩展方法不是访问者模式实现的真实示例。有人可以解释一下吗? 访问者模式和扩展方法之间有联系吗?

最佳答案

我不会说访问者模式和扩展方法之间有任何直接关系,但它们有相似之处。

访问者模式的目的是允许在对象结构的元素上轻松添加操作,而无需修改不同的元素本身。主要好处是因为像 xml 这样的对象结构将具有不同类型的节点。如果你想在每个节点上添加一个操作,那么你必须在不同类的所有节点中实现它。使用该模式,您可以将其集中在访问者内部。另一方面,扩展方法只关注单个类。

相似之处在于,在扩展方法和访问者类中,您无权访问类的私有(private)字段。

在我的工作中,我没有遇到过需要应用访客模式的情况,但另一方面,我经常使用扩展。直到最近我才实现 Active Record我的一些模型的扩展,扩展方法对这些模型确实有帮助。

因此,我想说它们之间的相似之处在于它们有助于将行为扩展到一个类/一组类,而相似性几乎就此结束。

关于extension-methods - 扩展方法是访问者模式的一个例子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29904979/

相关文章:

linq-to-sql - 简单的 LINQ to SQL 扩展方法

c# - 为什么不能从扩展方法的使用中推断出类型?

c# - 扩展方法和显式转换

java - 如何在 Java 中为 DAG 结构创建迭代器包装器?

count - 如何在 Web 应用程序中创建可靠且强大的页面查看计数器?

c# - 我执行 : c# extension methods 有什么问题

c# - 从.NET Core 2.1降级到.NET 4.7.1时如何使用IApplicationBuilder和IServiceCollection?

java - 访客模式程序无法正常工作

java - 泛型和访问者模式

language-agnostic - 访客模式的实际优势是什么?有哪些替代方案?