Проверьте www.netlib.org , который сохраняется Oak Ridge National Lab и Университетом Теннесси. Можно искать числовые пакеты там. Существует также Числовые Рецепты в C++ , который имеет код, который идет с ним, но версия C++ книги является несколько дорогой, и я услышал код, описанный как "ужасный". C и версии ФОРТРАНА свободны, и связанный код довольно хорош.
Вы не можете добавлять методы к существующему типу, если существующий тип не помечен как частичный, вы можете только добавлять методы, которые появляются как член существующего типа через расширение методы. В этом случае вы не можете добавлять статические методы к самому типу, поскольку методы расширения используют экземпляры этого типа.
Ничто не мешает вам создать свой собственный статический вспомогательный метод, подобный этому:
static class DateTimeHelper
{
public static DateTime Tomorrow
{
get { return DateTime.Now.AddDays(1); }
}
}
Который вы бы использовали следующим образом :
DateTime tomorrow = DateTimeHelper.Tomorrow;
I пойдет с 88 байтами. Если вы посмотрите на базу данных состояний ASP.NET, то вот как она определяется.
Тип объект. Не очень красиво, но все же интересно.public static class Foo
{
public static void Bar()
{
var now = DateTime.Now;
var tomorrow = typeof(DateTime).Tomorrow();
}
public static DateTime Tomorrow(this System.Type type)
{
if (type == typeof(DateTime)) {
return DateTime.Now.AddDays(1);
} else {
throw new InvalidOperationException();
}
}
}
В остальном у IMO Andrew и ShuggyCoUk есть лучшая реализация.
К сожалению, вы не можете этого сделать. Я считаю, что это было бы полезно. Более естественно ввести:
DateTime.Tomorrow
, чем:
DateTimeUtil.Tomorrow
С классом Util вы должны проверять наличие статического метода в двух разных классах, а не в одном.
Методы расширения - это синтаксический сахар для создания статических методов, первый параметр которых является экземпляром типа T, похожим на метод экземпляра на T.
Таким образом, преимущества в значительной степени теряются там, где вам нужно создать `` статические методы расширения '', так как они запутают читателя кода даже больше, чем метод расширения (поскольку они кажутся полностью квалифицированными, но фактически не определены в этом классе) без синтаксической выгоды (возможность цепные вызовы в свободном стиле в Linq, например).
Поскольку вам все равно придется вводить расширения в область видимости с помощью using, я бы сказал, что проще и безопаснее создавать:
public static class DateTimeUtils
{
public static DateTime Tomorrow { get { ... } }
}
А затем использовать это в своем код через:
WriteLine("{0}", DateTimeUtils.Tomorrow)
Используйте метод расширения .
Ex:
namespace ExtensionMethods
{
public static class MyExtensionMethods
{
public static DateTime Tomorrow(this DateTime date)
{
return date.AddDays(1);
}
}
}
Использование:
DateTime.Now.Tomorrow();
или
AnyObjectOfTypeDateTime.Tomorrow();