Очень жаль, что в .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 не похож на aviable долгосрочная платформа, если она не может иметь такую абстракцию, я думаю - и будьте эффективны в этом.
Абстракция - это повторное использование.
update:
Это примерсигнатура типа реализации:
public struct Integer32 : INumeric<Integer32, Int32>, IOrder<Integer32, Int32>
Компенсация отсутствия ковариантных типов возвращаемых данных.