使用扩展方法将实现“注入”到类中,从而实现接口?

时间:2011-01-30 18:33:26

标签: .net oop extension-methods

是否可以将代码“注入”类(通过引用包含扩展方法的命名空间),从而模拟某些接口的基类实现?或者这被认为是不好的做法(即使不可能)?

Imports MyApp.Extensions

Class SomeClass : Inherits System.SomeBaseClass : Implements MyApp.IAppInterface

End Class

Public Interface IAppInterface
    Sub InterfaceMethod()
End Interface


Namespace MyApp.Extensions
    Public Module SomeClassExtensions
        Public Sub InterfaceMethod(ByVal someClass as MyApp.SomeClass)
            //Implementation
        End Sub
    End Module
End Namespace

2 个答案:

答案 0 :(得分:1)

问题是,您的SomeClassExtensions.InterfaceMethod将如何执行?即在IAppInterface中定义了哪些属性/方法,以便在扩展方法中有足够的数据/行为来实现它?我认为你会发现接口必须具有一定的“基础”方法集才能使其有意义。

最重要的是,人们经常在界面上定义其他方法,以使调用者更加方便 - 这些方法实际上只是“基础”接口方法集的组合。这些便捷方法是从界面中删除的绝佳候选方法,并且通过扩展方法完全定义。这减轻了接口实现者必须实现这些便捷方法的负担(方便的方法通常以相同的方式编码,无论实现如何),同时仍然允许您的调用者享受能够调用它们的好处。

答案 1 :(得分:0)

我认为你误解了什么是扩展方法。 Here是关于与扩展方法相关的设计模式的问题。扩展方法的本体是它们将动作“附加”到对象而不是通常的“是”关系。你不能用它们实现接口方法,因为扩展方法被附加到的任何对象都是非抽象的(你已经实例化了,对吗?)因此,这会导致编译错误。