繁体   English   中英

了解OOP(WRT C#和DateTime类)

[英]Understanding OOP (wrt C# and the DateTime class)

请更正我认为在逻辑上没有意义的错误。

C#中的'DateTime'类具有一个称为'Now'的方法,该方法以对象格式返回当前日期和时间。

因此,要使用它,必须直接调用DateTime类并指定'Now'方法。 像这样:

DateTime meLearning = DateTime.Now;

并且,正如我通过尝试所学到的那样,我们无法通过这样的对象使用此方法“ Now”:

DateTime testObj = new DateTime();
testObj = meLearning.Now;

猜猜现在的问题是,为什么不呢? 考虑到当创建一个类的实例(即该类的一个对象)时,该对象可以使用所有的类方法(例如“ Now”)。

更深入地思考,我知道'Now'方法不能作用于一个对象。 所以也许这是一个不好的例子。

但这提出了一个问题,即某个对象是否可以访问某些方法,而某些对象则不能访问。 这些方法叫什么?如何区分类提供的方法列表之间的区别?

希望我的问题有道理。 欢迎所有回应。

Now不是方法-它是static属性-您不能在实例上使用它,因为它s静态的`


您可以通过DateTime.NowmyTimeInstance.Now看到差异

您可以在其定义上看到它:

public static DateTime Now { get; }

看到它被定义为静态成员,返回一个仅带有getter的DateTime实例(ofc。实际的实现将说getter并检索当前系统时间)

顺便说一句:设计选择并不是真正的好选择,因为它使使用此功能的代码难以测试


您可以在MSDN文档中找到有关静态类和静态成员的更多信息。

DateTime.Now是静态属性,只能在类型上调用,而不能在实例上调用。

来自Google:

静态关键字。 用C#术语来说,“静态”的意思是“与类型本身有关,而不是类型的实例”。 您可以使用类型名称而不是引用或值来访问静态成员,例如Guid.NewGuid()。

因此,静态属性/方法以static关键字为前缀。 Visual Studio自动过滤可以在类型和实例上调用的方法。

的方法.Now.UtcNow是不是static DateTime类的属性,所以你必须通过类没有实例给他们打电话。

您可以查阅原始源代码以查看其实际签名。

您还可以参考本文,了解什么是static属性以及如何在C#中使用它。

可以对类型调用静态方法或属性,并且内存中所有对象只有一个静态方法和属性的副本。

可以在实例上调用非静态方法,并且每个对象可以在内存中拥有自己的方法和属性副本。

因为DateTime.Now是current ,并且对所有对象都是正确的,所以不需要每个DateTime对象都有自己的当前日期,这就是为什么Now is static对于所有DateTimes都相等的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM