考慮類似的方法:任何方法返回類型包含一個接口的方法是通用的方法嗎?
IEnumerable<IFoo> DoSomethingRequiringIFooInterface(IEnumerable<IFoo> foos)
其中,該方法使用的IFoo接口(也許是篩選或排序),但它沒有創造實現IFoo的新對象。
豈不總是是更明智的方法一般這樣的:
IEnumerable<TFoo> DoSomethingRequiringIFooInterface<TFoo>(IEnumerable<TFoo> foos)
where TFoo : IFoo
,以便客戶端可以保存類型?還是有一些缺點(或某些情況下),你不會要做到這一點?
謝謝!
這是不正確的答案是誰在使用這種方法的人總是可以做:DoSomethingRequiringIFooInterface(...);所以通用的metod可以和非泛型相同,但是如果他願意的話,用戶可以選擇放置更多的約束。 –
watbywbarif
@watbywbarif,不,通用方法的契約是說'如果你給我一些類型爲T的對象,我會提供一些類型爲T的對象'。如果調用方法,則表示方法_has_返回從SpecialFoo派生的類型或類型的對象。將此與非泛型情況比較,用戶可以提供SpecialFoo實例並返回WrapperFoo實例(因爲它們實現了IFoo)。有些情況下您可能想要執行後者(例如使用裝飾器模式添加功能,以實現一個接口類) –
我不明白這是如何改變的事情,因爲他說他不是在創建新的對象。裝飾模式涉及創建新的對象。 – watbywbarif