2016-11-17 16 views
9

Najczęstsze typy danych są wbudowane w rodzaju: Int32 ma int, Boolean ma bool, String ma string, itd. Dlaczego nie ma wbudowany typ dla DateTime?Dlaczego nie ma wbudowanego typu dla DateTime?

Po pierwsze pomyślałem, że to dlatego, że DateTime ma właściwości i funkcje publiczne, ale tak samo jak int. Czy ktoś może rzucić trochę światła na to? Jakie są kryteria, aby typ miał wbudowany ekwiwalent?

+2

Jaką wartość by to dodać? Wszystkie 'double',' long', itd. Są _aliases_ dla 'System.Double',' System.Int64', itp. Nie wszystkie typy z aliasami są typami "wbudowanymi", ponieważ 'dziesiętny' NIE jest typem pierwotnym w CLR. –

Odpowiedz

9

CLR definiuje tylko podstawowe bloki konstrukcyjne: minimalne typy danych niezbędne do zdefiniowania wszystkich pozostałych. Są to typy, którym nadano pseudonim.

Ponieważ DateTime to tylko zbiór długich i całkowitych, spakowanych w strukturę, nie ma potrzeby tworzenia nowego typu danych w CLR dla niego. Można go zbudować za pomocą typów danych już zdefiniowanych w CLR. Nie ma potrzeby jej aliasingu.

+1

Myślę, że OP oznacza: dlaczego możemy wpisać 'int' dla' System.Int32' i 'string' dla' System.String', ale nie 'datetime' dla' System.DateTime'? –

+4

Jeśli to jest pytanie, czy jest to dość proste: 'DateTime' nie jest częścią CLR. Dlatego nie ma żadnego pseudonimu. To nie jest typ pierwotny. –

+2

@PatrickHofman, który nie jest świetnym argumentem. 'System.Decimal' nie jest częścią CLR, ale mamy' decimal'. –

1

To tylko aliasy w języku. DateTime nie ma aliasu. to jest to!

UPDATE:
Według specyfikacji języka C#:

C# udostępnia zestaw predefiniowanych typów struct nazywane typów prostych. Typy proste są identyfikowane za pomocą słów zastrzeżonych, ale te zarezerwowane słowa są po prostu aliasami dla wstępnie zdefiniowanych typów struktur w przestrzeni nazw System, zgodnie z opisem w tabeli poniżej.

 
    Reserved word Aliased type 
    ---------------------------- 
    sbyte   System.SByte 
    byte   System.Byte 
    short   System.Int16 
    ushort   System.UInt16 
    int    System.Int32 
    uint   System.UInt32 
    long   System.Int64 
    ulong   System.UInt64 
    char   System.Char 
    float   System.Single 
    double   System.Double 
    bool   System.Boolean 
    decimal   System.Decimal 

Specyfikacja języka C# można znaleźć tutaj:
C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC# \ Dane \ 1033 \ CSharp Język Specification.docx