Очень жаль, что в .Net нет полиморфизма для чисел, то есть нет интерфейса INumeric, который объединяет различные типы числовых типов, такие как bool, byte, uint, int и т. Д. В крайнем случае хотелось бы получить полный пакет абстрактных типы алгебры.
Джо Даффи написал по этому поводу статью:
http://www.bluebytesoftware.com/blog/CommentView,guid,14b37ade-3110-4596-9d6e-bacdcd75baa8.aspx
Как бы вы выразили это на C #, чтобы модернизировать его, не влияя на .Net или C #?
У меня есть одна идея, которая включает в себя сначала определение одного или нескольких абстрактных типов (интерфейсов, таких как INumeric - или более абстрактных, чем это), а затем определение структур, которые реализуют их, и обертывают типы, такие как int, при обеспечении операций, возвращающих новый тип (например, Integer32: INumeric; где сложение определяется как
public Integer32 Add(Integer32 other)
{
return Return(Value + other.Value);
}
Я немного боюсь скорости выполнения этого кода, но, по крайней мере, он абстрактен.
Никакого перегрузки оператора, доброта ...
Есть другие идеи?
.Net не выглядит жизнеспособной долгосрочной платформой, если в ней не может быть такой абстракции, как я думаю, и при этом действовать эффективно.
Абстракция - это повторное использование.
Обновить:
Это пример сигнатуры типа реализации:
public struct Integer32 : INumeric<Integer32, Int32>, IOrder<Integer32, Int32>
Компенсация отсутствия ковариантных возвращаемых типов.
