C# 解释DateTime.Now在.Net中的设计

C# 解释DateTime.Now在.Net中的设计,c#,.net,asp.net,vb.net,oop,C#,.net,Asp.net,Vb.net,Oop,我有一个关于.Net framework中日期对象的设计的问题,更具体地说是Now属性 我知道现在是一个日期类型的属性。(这很有意义,因为我看到了方法.AddHours()、AddYears()等)如果现在是类(或结构),它如何直接返回值 例如:如何在C#/VB.net中创建一个类或结构,使我能够在不调用Now属性的情况下执行相同的操作 (VB.Net) 将WeatherObject暗显为新的WeatherReporter() 如果WeeatherReport有一个名为TodaysWeather

我有一个关于.Net framework中日期对象的设计的问题,更具体地说是Now属性

我知道现在是一个日期类型的属性。(这很有意义,因为我看到了方法.AddHours()、AddYears()等)如果现在是类(或结构),它如何直接返回值

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

(VB.Net) 将WeatherObject暗显为新的WeatherReporter()

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

Dim TheForecast as string=WeatherReporter.TodaysWeather 
Dim PlainTextReport as string=WeeatherReport.TODAYSHEATHER

在我看来,你今天要取消她的另一处房产。但对于Datetime,现在的例子是你不需要。不管怎样,我知道这是个奇怪的问题。我只是想更好地理解这些物体是如何被放置在引擎盖下的

谢谢你告诉我这件事

下面是一个涉及上述问题的代码示例

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

我知道这是一个令人困惑的问题,lol。谢谢你的耐心。

。网络属性不仅仅是值——它们围绕基础值封装了getter和setter方法。在这种情况下,它们可以在返回对象之前初始化对象。因此,例如,
DateTime.Now
可以这样实现(无需尝试通过反射器或参考源找到其实际实现…):

现在公开静态日期时间
{
得到
{
var d=new DateTime(){.Kind=DateTimeKind.Local};
//确定当前系统时间并将d设置为该值的逻辑
返回d;
}
}

(ref:)

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

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

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

DateTime。现在在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#中:


它是作为静态getter方法实现的。我相信在你的WeatherReporter课程中,你要找的东西会是这样的:

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

假设WeatherReporter类有一个构造函数,该构造函数接受
DateTime

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

感谢您的反馈。在C#或VB.Net中,如何在不引用属性的情况下从代码行中的类返回值?Now对象内部是否有默认属性?“Now”不是对象-它是DateTime类中的属性。我应该更清楚地说明这一点。另外,@cHao在下面指出,
Now
属性的重要一点是它是静态的。它实例化了它根据需要返回的
DateTime
,它不需要现有的实例。只需添加,因为这显然是他的问题:这里的重要性是static关键字(或在VB中共享),它使它成为该类型的方法/属性,不是实例。挑剔:这实际上是对另一个属性返回值的方法调用的包装。:)但原则是一样的。