我有一个关于.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
我知道这是一个令人困惑的问题,哈哈。谢谢你的耐心
答案 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()
)来调用它。