Почему DateTime является структурой в .NET?

Вы coud также пробуют виртуальный сервер по требованию сервис как этот от Выбор CohesiveFT

компоненты, которые Вы хотите (например, erlangrb12 + отклонения от курса + mysql + erlyweb) и он создаст изображение vm для Вас, чтобы загрузить или поместить на ec2.

Прокрутка, которой Вы владеете локально, довольно проста также, если Вы следуете инструкциям в прагматической книге программистов, Программируя Erlang

15
задан Greg D 31 October 2009 в 15:49
поделиться

8 ответов

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

Кроме того, сколько вариантов формы DateTime вы можете придумать? (Игнорируя все альтернативные реализации ToString, которые вы имеете в виду.) Это не совсем тот тип, который предлагает полиморфизм.

Обратите внимание, что для использования другой стратегии форматирования для DateTimes, как я думаю, вы хотите, вам лучше взглянуть на другую способ форматирования, чем просто использование ToString. Если вы посмотрите на интерфейс ICustomFormatter в MSDN, вы

17
ответ дан 1 December 2019 в 00:01
поделиться

Для этого вы можете использовать методы расширения: Объявить расширение:

public static class DateTimeExtensions
{
    public static string ToStringFormatted(this DateTime date)
    {
        return date.ToString("{d}");
    }
}

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

using DateTimeExtensions;
...
var d = new DateTime();
System.Diagnostics.Debug.WriteLine(d.ToStringFormatted());

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

Ссылка: Методы расширения (c #)

13
ответ дан 1 December 2019 в 00:01
поделиться

Потому что это одна точка. У него нет нескольких фрагментов данных. Под капотом он представлен длинным.

12
ответ дан 1 December 2019 в 00:01
поделиться

Если вы хотите узнать больше о системных классах и структурах, загрузите бесплатный рефлектор .NET ( http://www.red-gate.com/products/reflector/ ).

В любом случае, если вы хотите переопределить форматирование DateTime, предоставьте собственный IFormatProvider. Используйте .NET Reflector, чтобы узнать, как реализован DateTimeFormatInfo, а затем реализовать свой собственный.

5
ответ дан 1 December 2019 в 00:01
поделиться

Просто потому, что это структура (или даже если бы это была герметичный класс), это не значит, что это конец пути. Эту проблему можно решить с помощью композиции , а не наследования. Вот пример «объективации» класса DateTime:

public class MyDateTime
{
    DateTime? value;

    public MyDateTime()
    {
        this.Value = DateTime.Now;
    }

    public MyDateTime(DateTime? dateTime)
    {
        this.Value = dateTime;
    }

    public override String ToString()
    {
        if (this.Value != null)
        {
            return this.Value.Value.Month.ToString() + " my favorite time of the year";
        }

        return null;
    }

    public System.DateTime? Value
    {
        get { return this.value; }
        set { this.value = value; }
    }
}
5
ответ дан 1 December 2019 в 00:01
поделиться

I believe that it is a struct because structs are value types and classes are reference types. The actual data in a DateTime is a single long integer. If it were a class, every time you created a new object, 8 bytes would be allocated on the heap and another 8 bytes would be allocated on the stack for the pointer. So by making a DateTime a struct, it effectively cuts the memory requirements in half.

You can find more information in this question.

4
ответ дан 1 December 2019 в 00:01
поделиться
  • DateTime имеет небольшой размер. Поэтому неэффективно выделять для этого память в куче.

  • Логично делать ее копирование при назначении, а не создавать ссылку на тот же объект, тем более что он неизменяемый.

3
ответ дан 1 December 2019 в 00:01
поделиться

Вам не нужно игнорировать метод ToString () , просто проверьте шаблоны здесь , другие вам не понадобятся :)

более подробный пост здесь

2
ответ дан 1 December 2019 в 00:01
поделиться
Другие вопросы по тегам:

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