Объясните дизайн DateTime.Now в .Net - PullRequest
2 голосов
/ 27 сентября 2011

У меня есть вопрос, касающийся дизайна объекта Date в .Net framework, более конкретно свойства Now.

Я знаю, что Now - это свойство типа Date.(Это имеет смысл, поскольку я вижу методы .AddHours (), AddYears () и т. Д.). Если теперь класс (или структура), как он возвращает значение напрямую.

Например: как бы я создалкласс или структура в C # / VB.net, которые позволили бы мне сделать то же самое, не вызывая свойство Now?

(VB.Net) Dim WeatherObject как новый WeatherReporter ()

ЕслиУ WeeatherReport было свойство с именем TodaysWeather, которое было классом, как я мог тогда получить значение, подобное этому

Dim PlainTextReport как string = WeeatherReport.TodaysWeather

Мне кажется, что вам нужно было бы вызватьеще одна собственность от TodaysWeather.Но с примером Datetime.Now вы этого не сделаете.В любом случае, я знаю, это странный вопрос.Я просто пытался лучше понять, как некоторые из этих объектов установлены под капотом

Спасибо за любой свет по этому вопросу.

Вот пример кода, относящегося к вышеуказанному вопросу.

Public Class WeatherReporter
    Shared ReadOnly Property TodaysWeather As DayWeather
        Get
            TodaysWeather = New DayWeather
            Return TodaysWeather.Current
        End Get
    End Property
End Class

Public Class DayWeather
    Public Property Current As String = "Sunny"
End Class

Теперь похож на объект DateTime.Now

Как вы можете пример погоды, подобный этому

Dim TheForecast as string=WeatherReporter.TodaysWeather 

Кажется, что потребуется следующее

Dim TheForecast as string=WeatherReporter.TodaysWeather.Current

Я знаю, это запутанный вопрос, лол.спасибо за ваше терпение

Ответы [ 5 ]

4 голосов
/ 27 сентября 2011

Отражая исходный код, очевидно, что это просто оболочка свойства вокруг функции.

public static DateTime Now
{
    get
    {
        return UtcNow.ToLocalTime();
    }
}

Вам не нужно создавать экземпляр объекта DateTime, поскольку свойство помечено как static.

2 голосов
/ 27 сентября 2011
Свойства

.NET - это не просто значения - они инкапсулируют методы getter и setter вокруг базовых значений. В этом случае они могут инициализировать объекты перед их возвратом. Так, например, DateTime.Now может быть реализовано следующим образом (без попытки найти его фактическую реализацию через Reflector или Reference Sources ...):

public static DateTime Now
{
    get
    {
        var d = new DateTime() { .Kind = DateTimeKind.Local };
        // Logic to determine the current system time and set d to that value
        return d;
    }
}

(ref: MSDN )

1 голос
/ 27 сентября 2011

DateTime.Now выглядит примерно так в VB.net ...

public structure DateTime

    ...other code...

    ''// `shared` makes this a class property, not an instance property.
    ''// This is what lets you say `DateTime.Now`
    public shared readonly property Now as DateTime
        get
            ... do some magic to return the current date/time ...
        end get
    end property

    ... other code ...

end class

или в C #:

public struct DateTime
{
    ... other code ...

    // `static` works like VB's `shared` here
    public static DateTime Now
    {
        get { /* do your magic to return the current date/time */ }
    }

    ... other code ...
}
0 голосов
/ 27 сентября 2011

DateTime.Now - это статическое / общее свойство. Вам не нужно создавать новый объект (используя New DateTime()) для его вызова.

0 голосов
/ 27 сентября 2011

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

Public Shared ReadOnly Property TodaysWeather As WeatherReporter
    Get
        Return New WeatherReporter(DateTime.Now)
    End Get
End Property

Это предполагает, что ваш класс WeatherReporter имеет конструктор, который принимает DateTime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...