[英]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.Now
与myTimeInstance.Now
看到差异
您可以在其定义上看到它:
public static DateTime Now { get; }
看到它被定义为静态成员,返回一个仅带有getter的DateTime
实例(ofc。实际的实现将说getter并检索当前系统时间)
顺便说一句:设计选择并不是真正的好选择,因为它使使用此功能的代码难以测试
您可以在MSDN文档中找到有关静态类和静态成员的更多信息。
DateTime.Now是静态属性,只能在类型上调用,而不能在实例上调用。
来自Google:
静态关键字。 用C#术语来说,“静态”的意思是“与类型本身有关,而不是类型的实例”。 您可以使用类型名称而不是引用或值来访问静态成员,例如Guid.NewGuid()。
因此,静态属性/方法以static关键字为前缀。 Visual Studio自动过滤可以在类型和实例上调用的方法。
可以对类型调用静态方法或属性,并且内存中所有对象只有一个静态方法和属性的副本。
可以在实例上调用非静态方法,并且每个对象可以在内存中拥有自己的方法和属性副本。
因为DateTime.Now是current ,并且对所有对象都是正确的,所以不需要每个DateTime对象都有自己的当前日期,这就是为什么Now is static对于所有DateTimes都相等的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.