比方說,我寫了一個真正的踢屁股界面。所以,實際上,我需要使用一些內置類型來實現它們,所以無論使用此接口編寫的代碼都可以使用內置類型。有什麼辦法讓現有類型實現一個接口?
public interface IKickAss
{
int Yeahhhhhhh() { get; }
}
public static class Woot
{
public int Bar(IKickAss a, IKickAss b)
{
return a.Yeahhhhhhh - b.Yeahhhhhhh;
}
}
// What I'd like to do, sort of.
public partial struct Int32 : IKickAss
{
public int Yeahhhhhhh
{
get
{
return this;
}
}
}
我想這麼多次,原因很多。最近的是我爲「uint」實現了基數排序,但也創建了一個簡單的「IRadixSortable」接口,它需要屬性「uint RadixKey {get}」。這意味着我已經基本上重複了排序代碼:一次爲uint數組,另一次爲IRadixSortable數組。我寧願寫一個通過使uint類型實現IRadixSortable。有沒有辦法做到這一點...也許使用反射?
Haskell可以做到這一點(即類型類可以隨時在任何數據類型上實例化),我認爲這是它非常強大的一個非常重要的原因。 C#可以真正使用這個功能。也許叫它「擴展接口」:)
特別激怒我的是缺乏像IAddable這樣的接口,這對於泛型約束來說是天賜之物。 – Promit 2009-04-29 00:22:39
準確! Haskell的類型類可以讓你做各種簡潔的事情。例如,「add3 x = x + 3」是一個將3加到* any *「Num」類型的函數;這意味着,如果稍後有人過來創建自己的「Num」類型,則該功能將完美地與其一起工作。 – kinghajj 2009-04-29 00:27:07
最好。示例代碼。永遠。 – 2009-04-29 01:07:34