假设我按如下方式初始化DateTime变量。

表达式1

DateTime foo = DateTime.Now;


问题#1是否只是在没有显式调用构造函数的情况下构造DateTime对象?

问题#2是否有可能,因为.NET开发人员设置了具有自动构造日期时间为现在的日期时间对象的属性的DateTime结构?

接下来,如果我使用这种语法

表达式2

DateTime bar = new DateTime();


我已经动态创建了一个DateTime结构。

问题3除了使用表达式2时可以指定任何日期(使用其他构造函数)之外,何时以及为什么使用表达式1而不是表达式2的事实?

谢谢

黑麦

最佳答案

是的,你做到了。使用类非常容易,就像使用结构一样。考虑以下代码段:

public class MyDateTime
{
    public static MyDateTime Now
    {
        get { return new MyDateTime(); }
    }
}


现在,无需使用构造函数,就可以编写MyDateTime.Now并构造该类型的实例。

当然,结构实际上很特殊,因为我可以这样写:

class Foo
{
    private DateTime date;
    public Foo()
    {
        Console.WriteLine(date);
    }
}


在此类中,从未调用date的构造函数,而是实际存在并构造了日期实例,这是因为值类型被初始化为默认值,该默认值等于按位的全零。这与手头的问题并不特别相关,但您确实提出过。

还值得注意的是,在变量之间分配结构时会复制它们。请考虑以下代码段:

public static void Foo(DateTime input)
{
    DateTime copy = input;
}


分配正在创建一个新的DateTime实例。如果使用类完成此操作,则不会,它只会将引用复制到对象,而是使用每个赋值类型的值类型,或将变量的值复制到另一个变量的其他操作正在构造新对象。
从语言的角度来看,没有什么特别的。重写Now属性以构造一个代表当前时间的实例,仅此而已。您可以在属性获取器中运行所需的任何代码。
如果要获取当前时间而不是硬编码时间,则可以使用DateTime.Now

关于c# - 初始化本地与动态DateTime变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23816887/

10-11 22:25
查看更多