Как я расширяю класс с помощью c# дополнительных методов?

Проверьте www.netlib.org , который сохраняется Oak Ridge National Lab и Университетом Теннесси. Можно искать числовые пакеты там. Существует также Числовые Рецепты в C++ , который имеет код, который идет с ним, но версия C++ книги является несколько дорогой, и я услышал код, описанный как "ужасный". C и версии ФОРТРАНА свободны, и связанный код довольно хорош.

92
задан stackuser83 26 January 2017 в 19:53
поделиться

5 ответов

Вы не можете добавлять методы к существующему типу, если существующий тип не помечен как частичный, вы можете только добавлять методы, которые появляются как член существующего типа через расширение методы. В этом случае вы не можете добавлять статические методы к самому типу, поскольку методы расширения используют экземпляры этого типа.

Ничто не мешает вам создать свой собственный статический вспомогательный метод, подобный этому:

static class DateTimeHelper
{
    public static DateTime Tomorrow
    {
        get { return DateTime.Now.AddDays(1); }
    }
}

Который вы бы использовали следующим образом :

DateTime tomorrow = DateTimeHelper.Tomorrow;
68
ответ дан 24 November 2019 в 06:23
поделиться

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 есть лучшая реализация.

9
ответ дан 24 November 2019 в 06:23
поделиться

К сожалению, вы не можете этого сделать. Я считаю, что это было бы полезно. Более естественно ввести:

DateTime.Tomorrow

, чем:

DateTimeUtil.Tomorrow

С классом Util вы должны проверять наличие статического метода в двух разных классах, а не в одном.

2
ответ дан 24 November 2019 в 06:23
поделиться

Методы расширения - это синтаксический сахар для создания статических методов, первый параметр которых является экземпляром типа T, похожим на метод экземпляра на T.

Таким образом, преимущества в значительной степени теряются там, где вам нужно создать `` статические методы расширения '', так как они запутают читателя кода даже больше, чем метод расширения (поскольку они кажутся полностью квалифицированными, но фактически не определены в этом классе) без синтаксической выгоды (возможность цепные вызовы в свободном стиле в Linq, например).

Поскольку вам все равно придется вводить расширения в область видимости с помощью using, я бы сказал, что проще и безопаснее создавать:

public static class DateTimeUtils
{
    public static DateTime Tomorrow { get { ... } }
}

А затем использовать это в своем код через:

WriteLine("{0}", DateTimeUtils.Tomorrow)
18
ответ дан 24 November 2019 в 06:23
поделиться

Используйте метод расширения .

Ex:

namespace ExtensionMethods
{
    public static class MyExtensionMethods
    {
        public static DateTime Tomorrow(this DateTime date)
        {
            return date.AddDays(1);
        }    
    }
}

Использование:

DateTime.Now.Tomorrow();

или

AnyObjectOfTypeDateTime.Tomorrow();
177
ответ дан 24 November 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: