2015-01-06 20 views
1

.NET Framework中的System命名空間包含許多未由C#預定義的重要類型,例如, DateTime爲什麼DateTime不是預定義的類型?

請問您能解釋一下,爲什麼DateTime不是預定義類型?

+4

你是什麼意思預定義?它沒有像'System.Int32' - >'int'這樣的別名? –

+2

我認爲你的意思是沒有預先定義的基元? –

+2

我真的不清楚你在問什麼。你期望C#(作爲lanugage)對'DateTime'有什麼支持? –

回答

3

爲什麼要這樣呢?它不是basic type,它是struct of various basic types

只包含支持CLR所需的最小類型,僅此而已。不需要在CLR級別上聲明很多類型,它只會使它更加複雜,並使得將各種平臺上的CLR維護在一個地獄中。

由於類型是建立在CLR之上的,因此它可以受益於CLR帶來的抽象。

+0

可以說,'string'同樣適用於'string',它可以使用'char'數組來實現,也就是說,就像一類不同的基本類型一樣。 –

+0

@ O.R.Mapper:確實,但是具有非常具體的實現,我猜是出於性能原因。請參閱[源代碼](http://referencesource.microsoft.com/#mscorlib/system/string.cs,8281103e6f23cb5c)。 –

+0

當然,在編寫我的評論之前,我剛剛檢查了ILSpy,因此我寫了「可以實現」 - 在任何情況下,具體實現似乎都不是C#語言規範所要求的。 C#'string'關鍵字被指定爲System.String類的別名,但沒有提及該類,因爲它必須以任何方式「特殊」,或者至少不比其他類更特別沒有C#關鍵字別名,例如'Exception'。 –

3

types that have aliases(如System.Int32 - >int)是,你可以看到,在系統命名空間還 「預定義」。通過這種邏輯,DateTime是預定義的,它只是沒有別名。

2

因爲它不是在語言規範:

4.1值類型

[...] C#提供了一組預定義結構類型稱爲簡單類型。簡單類型通過保留字標識。

  • 簡單型
    • 數值型
    • 布爾
  • 數值型
    • 體型
    • 浮點型
    • 小數

至於 「爲什麼」,你需要的語言的設計者之一。你爲什麼期望它?爲什麼DateTime,但不是Point

+2

我的假設一直是「因爲它由幾個可分離的組件構成,所以不是原始的」,但我想你可以提出關於字符串由許多字符組成的論點,但我認爲這個假設是合理的? – PhillipH

+0

任何解釋都可以合理,但OP沒有給出任何解釋,因此我們無法正確回答。所以我對OP的問題是:他認爲預定義的類型是什麼,他期望什麼,爲什麼'DateTime'是一個? – CodeCaster

相關問題