假設我有一個接口IFoo
,其實現類別爲VideoFoo
,AudioFoo
和TextFoo
。進一步假設我不能修改任何代碼。假設我會那麼喜歡寫作用不同的基礎上運行時類型的IFoo
的功能,如如何幹淨地處理基於多態的不同行爲
Public Class Bar
Public Shared Sub Fix(ByVal Foo as IFoo)
If TypeOf Foo Is VideoFoo Then DoBar1()
If TypeOf Foo Is AudioFoo Then DoBar2()
If TypeOf Foo Is TextFoo Then DoBar3()
End Sub
End Class
我想重構這個使用重載的方法:
Sub DoBar(ByVal foo as VideoFoo)
Sub DoBar(ByVal foo as AudioFoo)
Sub DoBar(ByVal foo as TextFoo)
但只有這樣我才能看到寫這樣的東西就是寫
Sub DoBar(ByVal foo as IFoo)
然後我必須做我的「If TypeOf ... Is」。我如何重構這個來利用IFoo
實現的多態性,而無需手動檢查類型?
(在VB.NET,雖然我的問題適用於C#太)
爲什麼不能重載Fix? – Blorgbeard 2011-03-24 20:42:34
因爲我有一個IFoo類型的實例;如果我只是添加其他重載到類吧,我的代碼將始終調用Fix(IFoo),而不是我想要的特定Fix(...)。 – 2011-03-24 20:47:07
噢,對 - 我明白了 – Blorgbeard 2011-03-24 20:49:58