Допустим, я пишу действительно потрясающий интерфейс. На самом деле, это так круто, что мне нужны некоторые встроенные типы, которые я использую для их реализации, чтобы любой код, который я пишу и использовал этот интерфейс, также мог использовать встроенные типы.
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 # действительно может использовать эту функцию. Может быть, это называется "интерфейс расширения":)