为什么日期时间在.net中的结构?(Why is DateTime a structure in .

2019-09-03 02:33发布

为什么DateTime的结构,而不是一个可继承类?

(我想能够重写ToString()方法,但我不能。)

Answer 1:

可能是因为它被认为是一个小的,简单的和不可改变的数据结构,很象一个整数或小数。 使得它在这些条件下,结构使使用日期时间非常有效。 如果已经做了一个类,这个效率效益会被丢失,因为这将需要每次创建一个新的datetime时间内存分配。

再说了,你有多少变种一个DateTime的形式可以拿出? (忽略你心目中的allternate的ToString实现。)这不正是邀请多态性的类型。

请注意,对于使用不同格式的策略为您DateTime是否,因为我想你想,你最好看看不同的方式比只使用的ToString格式化。 如果你看一下ICustomFormatter在MSDN界面,你会看到你如何插入的String.Format管道覆盖,而无需子集的现有类型的格式。



Answer 2:

您可以使用此扩展方法:声明扩展:

public static class DateTimeExtensions
{
    public static string ToStringFormatted(this DateTime date)
    {
        return date.ToString("{d}");
    }
}

使用扩展:

using DateTimeExtensions;
...
var d = new DateTime();
System.Diagnostics.Debug.WriteLine(d.ToStringFormatted());

这样你就可以简单的实现上的日期时间使用你自己的方法,多数民众赞成。 这样,它可以很容易地无处不在,你的解决方案中使用。 只有你所要做的事情就是使用命名空间。

参考: 扩展方法(C#)



Answer 3:

因为它是一个单点。 它不具有多个数据段。 引擎盖下它是由一个长表示。



Answer 4:

如果您想了解更多关于系统类和结构,下载免费的.NET反射器( http://www.red-gate.com/products/reflector/ )。

无论如何,如果你想覆盖的DateTime是如何被格式化,提供自己的IFormatProvider。 使用.NET反射来找出的DateTimeFormatInfo是如何实现的,然后实现自己的。



Answer 5:

只是因为它是一个结构(或者即使它是一个密封类),这并不意味着它是路的尽头。 你能解决这个问题组成 ,而不是继承。 这里的“客观化” DateTime类的一个示例:

public class MyDateTime
{
    DateTime? value;

    public MyDateTime()
    {
        this.Value = DateTime.Now;
    }

    public MyDateTime(DateTime? dateTime)
    {
        this.Value = dateTime;
    }

    public override String ToString()
    {
        if (this.Value != null)
        {
            return this.Value.Value.Month.ToString() + " my favorite time of the year";
        }

        return null;
    }

    public System.DateTime? Value
    {
        get { return this.value; }
        set { this.value = value; }
    }
}


Answer 6:

我相信,这是一个结构,因为结构是值类型和类是引用类型。 在一个DateTime的实际数据是一个长整数。 如果它是一类,每次你创建一个新的对象,8个字节将在堆中分配和另外8个字节将在堆栈指针上进行分配。 因此,通过使一个DateTime一个结构,它有效地减少了一半的内存需求。

你可以找到更多信息这个问题 。



Answer 7:

  • 日期时间具有体积小。 所以它是没有效率堆在此分配内存。

  • 这是符合逻辑的对转让的它的复制,没有创造同一个对象的引用,特别是因为它是不可变的。 这同样适用于它的操作( AddSubstract等)

  • 它必须转换为相应的COM结构。

如果您想自定义格式可以实现像显示它在这里 。



Answer 8:

你并不需要在此改变ToString()方法只检查模式在这里你不会真的需要别人:)

更详细的岗位在这里



文章来源: Why is DateTime a structure in .Net?