解释.Net中的DateTime.Now设计

时间:2011-09-26 23:14:37

标签: c# .net asp.net vb.net oop

我有一个关于.Net框架中Date对象设计的问题,更具体地说是Now属性。

我知道Now是属于Date类型的属性。 (这是有道理的,因为我看到方法.AddHours(),AddYears()等)如果现在是一个类(或结构),它如何直接返回一个值。

例如:如何在C#/ VB.net中创建一个类或结构,允许我在不调用Now属性的情况下执行相同的操作?

(VB.Net) Dim WeatherObject作为新的WeatherReporter()

如果WeeatherReport有一个名为TodaysWeather的属性,那么我怎么能得到像这样的值

Dim PlainTextReport as 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 个答案:

答案 0 :(得分:4)

反映源代码很明显,它只是一个函数的属性包装。

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

您不需要实例化DateTime对象,因为该属性标记为static

答案 1 :(得分:2)

.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;
    }
}

(参考:MSDN

答案 2 :(得分:1)

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 ...
}

答案 3 :(得分:0)

它是作为静态getter方法实现的。我相信你所寻找的东西在WeatherReporter类中看起来像这样:

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

假设您的WeatherReporter类具有接受DateTime的构造函数。

答案 4 :(得分:0)

DateTime.Now是静态/共享属性。您不必实例化新对象(使用New DateTime())来调用它。