我是VB.Net的新手,我很好奇扩展方法的用例。具体来说,当我拥有继承和接口时,为什么我会使用扩展方法?乍一看,扩展方法在我看来并不像一个非常OO的做法,并且看起来它们会导致代码不太可读,而不是使用子类和/或接口来实现相同的目的。我不知道延伸方法有什么特别之处吗?你什么时候使用它们?
答案 0 :(得分:3)
在实施扩展方法之前,人们应该总是试着看它是否适合标准的OO类。
然而,有两种情况我可以想到这些扩展可能非常方便:
1)基元类型的扩展:您不想只是为了向它添加方法而导出基本类型(如Int或Date)。我甚至不确定你是否被允许派生出一种原始类型,但即使你可以,但这并不意味着你应该这样做。
2)公共对象的扩展:假设您想要为一个非常常见的对象编写一些插件功能;假设将一个ToJSON方法添加到DbDataReader。您可以强制用户使用派生的DbDataReader类型(CustomDbDataReader),但是他们必须在整个地方更改代码才能使用新类。使用扩展将允许他们在本机DbDataReader上使用您的新方法。
您还会注意到DbDataReader是一个抽象类。 SqlDataReader和OleDbDataReader都派生自DbDataReader类。如果你想编写一个合法的OO函数,你必须为SqlDataReader编写一个函数,为OleDbDataReader编写另一个函数,即使函数完全相同。
答案 1 :(得分:1)
你是对的,扩展方法在OO工具箱中不是一个非常重要的工具。因此,您可能不会经常使用它们来扩展自己代码中的类。
正如您所写,在阅读其他开发人员的代码时,它们可能会导致混淆,因为您只能使用位于已导入的命名空间中的扩展方法。
然而,如果要创建扩展无法更改的类的辅助方法,扩展方法非常方便。这是为其创建的主要用例扩展方法。