请纠正我在逻辑上没有意义的错误。
C#中的'DateTime'类有一个名为'Now'的方法,它以对象格式返回当前日期和时间。
因此,要使用它,必须直接调用DateTime类并指定'Now'方法。像这样:
DateTime meLearning = DateTime.Now;
并且,正如我通过尝试一样学到的,我们不能通过这样的对象使用这个方法'Now':
DateTime testObj = new DateTime();
testObj = meLearning.Now;
现在猜猜问题是,为什么不呢? 当创建类的实例(即该类的对象)时,所有类方法(如“Now”)都可用于该对象。
深入思考,我知道'Now'方法不能对一个对象起作用。所以也许这是一个糟糕的例子。
但它引发了一个问题,即对象是否有某些方法可以访问,而有些方法无权访问。这些方法被称为什么?如何区分一个类提供的方法列表?
希望我的问题有道理。欢迎所有回复。
答案 0 :(得分:2)
Now
不是方法 - 它是static
属性 - 您无法在实例上使用它,因为它s
static`
您可以通过DateTime.Now
与myTimeInstance.Now
你可以在它的定义上看到它:
public static DateTime Now { get; }
看到它被定义为一个静态成员,只用一个getter返回一个DateTime
实例(ofc。真正的实现将有getter并检索当前系统时间)
答案 1 :(得分:2)
DateTime.Now是一个静态属性,只能在类型上调用,而不能在实例上调用。
来自谷歌:
静态关键字。在C#术语中,“静态”表示“与类型有关 本身,而不是类型的实例“。您访问静态 使用类型名称而不是引用或值的成员,例如 Guid.NewGuid()。
因此静态属性/方法以static关键字为前缀。 Visual Studio自动过滤您可以在类型和实例上调用的方法。
答案 2 :(得分:1)
方法.Now
和.UtcNow
是DateTime类的static
属性,因此您必须通过Class not instances调用它们。
您可以咨询original source code以查看其实际签名。
您还可以参考this article了解static
属性是什么,以及如何在C#中使用它
答案 3 :(得分:0)
可以在类型上调用静态方法或属性,并且内存中只有一个静态方法和属性的副本用于所有对象。
可以在实例上调用非静态方法,每个对象可以在内存中拥有自己的方法和属性副本。
因为DateTime.Now是当前,并且这对所有对象都是正确的,所以不需要每个DateTime对象都有自己的当前日期,这就是为什么Now是静态的对于所有DateTimes都是相同的。