CSharp學習筆記之一 C 中的型別

2021-06-19 12:22:01 字數 1361 閱讀 9587

在c#中,有且僅有兩種資料型別:值型別和引用型別。換言之,乙個變數要麼是值型別,要麼是引用型別。像我們常見的資料型別(int,float,double)、結構、列舉等等都屬於值型別,而像類、介面、委託等都屬於引用型別。所以,要想深入的了解.net framework的一些原理性的知識,值型別與引用型別是跨不過去的一道門檻。

下面是乙個關於c#中的型別的總結

但是c#中的基本型別的定義是源於什麼呢:

c#中變數的型別取決於什麼?

在c#中,變數是值型別還是引用型別,取決於其基本資料型別。在c#中,其基本資料型別並沒有內置於語言中,而是存在與.net framewok中。.net使用cts(通用語言系統)定義在il(中間語言)中使用的預定義資料型別。c#中所有資料型別都是物件,它們有屬性、方法等。

例如,在c#中宣告乙個int變數時,實際上是宣告了cts中system.int32的乙個例項。

值型別前面已經說過,值型別隱式派生於system.valuetype,那麼在平時遇到的資料型別中,有哪些屬於值型別呢?

整型。包括我們常見的short、int、long、byte、sbyte、bigint等這。

浮點型。包括float、double。 

用於財務計算的高精度decimal型別。 

結構體。struct,已經預定好的和使用者自定義的。 

列舉。 

bool型別。 

可空型別。

每種值型別均有乙個隱式的預設建構函式來初始化該型別的預設值,這也是為什麼像定義乙個int型的變數時,有時候沒有初始化,它也會有初始值為0的緣故。

還有一點需要注意的是,所有值型別都是seal(密封)型別,是不能再派生出新的資料型別的。

引用型別

在c#中,有以下這些引用型別:

陣列。 

類。 介面。 

委託。 

object。其實就是system.object,老大哥。

字串。string,system.string的別名,這也是乙個極其重要的引用型別,後面會有專門一篇來描述字串中的點點滴滴。

與值型別不同的是,引用型別可以派生出新的型別(不絕對話,比如說string就不可以)。需要注意的是,值型別中的結構體也是可以實現介面的。

記憶體分配

說起值型別和引用型別的不同,記憶體分配可謂是它們的本質區別了,這也可以讓我們更加清晰的了解一些生活中遇到的問題。

值型別的例項一般都會存放在棧上,之所以說是一般,是因為它有時候也會去引用型別那裡竄門,會有特殊情況,存放在堆上,接下來會講。與之不同的是,引用型別的物件則總是儲存在堆中,當然它的引用有時候也會存放在棧上,但是物件例項是一定存放在堆上的。

C 學習筆記之一 C 中的關鍵字

關鍵字是對編譯器具有特殊意義的預定義保留識別符號。它們不能在程式中用作識別符號,除非它們有乙個 字首。例如,if 是有效的識別符號,但 if 不是,因為 if 是關鍵字。下面是列出的所有的關鍵字在 c 程式的任何部分都是保留識別符號 abstract asbase bool break byte c...

C 學習筆記之一 C 中的關鍵字

關鍵字是對編譯器具有特殊意義的預定義保留識別符號。它們不能在程式中用作識別符號,除非它們有乙個 字首。例如,if 是有效的識別符號,但 if 不是,因為 if 是關鍵字。下面是列出的所有的關鍵字在 c 程式的任何部分都是保留識別符號 abstract asbase bool break byte c...

c 學習之一

建構函式不要為虛 virtual vc 6.0反正不支援,報錯為 error c2633 a inline is the only legal storage class for constructors 據說cb支援,不過,建構函式本來就沒必要為虛,物件初始化時肯定是要呼叫的 不過,有派生類時析構...