When/Why 我会在 VB.Net 中使用扩展方法吗?

When/Why would I use an extension method in VB.Net?

我是 VB.Net 的新手,我很好奇扩展方法的用例。具体来说,当我可以随意使用继承和接口时,为什么还要使用扩展方法?乍一看,扩展方法在我看来并不是一种非常面向对象的做法,而且与使用子类 and/or 接口来实现相同目的相比,它们似乎会导致代码可读性较差。我缺少的扩展方法有什么特别之处吗?你什么时候使用它们?

您说得对,扩展方法在 OO 工具箱中并不是一个非常重要的工具。因此,您可能不会经常使用它们来在您自己的代码中扩展 类。

如您所写,它们可能会在阅读其他开发人员的代码时造成混淆,因为您只能使用位于已导入的命名空间中的扩展方法。

不过,如果您想创建无法更改的扩展 类 的辅助方法,扩展方法将非常方便。这是为其创建的主要用例扩展方法。

在实施扩展方法之前,人们应该始终尝试查看它是否适合标准 OO class。

但是,我能想到这些扩展可能非常方便的 2 种情况:

1) 原始类型的扩展:您不想派生原始类型(如 Int 或 Date)只是为了向其添加方法。我什至不确定你是否被允许派生原始类型,但即使你可以,也不意味着你应该。

2) 普通对象的扩展:假设你想为一个非常普通的对象编写一些插件功能;假设将 ToJSON 方法添加到 DbDataReader。您可能会强制用户使用您派生的 DbDataReader 类型 (CustomDbDataReader),但他们必须更改整个地方的代码才能使用您的新 class。使用扩展将允许他们在本机 DbDataReader 上使用您的新方法。

您还会注意到 DbDataReader 是一个抽象 class。 SqlDataReader 和 OleDbDataReader 都派生自 DbDataReader class。如果您想编写一个合法的 OO 函数,则必须为 SqlDataReader 编写一个,为 OleDbDataReader 编写另一个,即使该函数做的事情完全相同。