C 語法細節知多少

2022-02-11 02:41:56 字數 2168 閱讀 9629

這些天又仔細看了遍msdn中的c#程式設計指南,有些細節的東西順便就記下了:

c#:結構可以實現介面,但它們無法繼承另乙個結構。因此,結構成員無法宣告為 protected。

從 enum 型別到整型的轉換需要用顯式型別轉換來完成。

對同一成員同時使用 new 和 override 是錯誤的做法,因為這兩個修飾符的含義互斥。new 修飾符會用同樣的名稱建立乙個新成員並使原始成員變為隱藏的。override 修飾符會擴充套件繼承成員的實現。類是引用型別,而結構是值型別。引用型別在堆中分配,記憶體管理由垃圾**器處理。值型別在堆疊上或以內聯方式分配,且在超出範圍時釋放。通常,值型別的分配和釋放開銷更小。然而,如果在要求大量的裝箱和取消裝箱操作的情況下使用,則值型別的表現就不如引用型別。

任何情況下,抽象類都不應進行例項化,因此,正確定義其建構函式就非常重要。確保抽象類功能的正確性和擴充套件性也很重要。

不能用 c# 重寫 internal virtual 方法

只有在通過派生類型別發生訪問時,基類的受保護成員在派生類中才是可訪問的,只有通過「派生類」才能訪問!

私有成員只有在宣告它們的類和結構體中才是可訪問的

靜態類和類成員用於建立無需建立類的例項就能夠訪問的資料和函式

靜態類的主要功能如下:

它們僅包含靜態成員。

它們不能被例項化。

它們是密封的。

它們不能包含例項建構函式

靜態成員:即使沒有建立類的例項,也可以呼叫該類中的靜態方法、字段、屬性或事件。如果建立了該類的任何例項,不能使用例項來訪問靜態成員。

靜態成員通常用於表示不會隨物件狀態而變化的資料或計算;例如,數學庫可能包含用於計算正弦和余弦的靜態方法。

靜態方法可以被過載,但不能被重寫。

不能在結構中定義析構函式。只能對類使用析構函式。

乙個類只能有乙個析構函式。

無法呼叫析構函式。它們是被自動呼叫的。

析構函式既沒有修飾符,也沒有引數。

readonly 關鍵字與 const 關鍵字不同。const 字段只能在該字段的宣告中初始化。readonly 字段可以在宣告或建構函式中初始化。因此,根據所使用的建構函式,readonly 字段可能具有不同的值。另外,const 欄位為編譯時常數,而 readonly 欄位可用於執行時常數。

字串物件是不可變的:即它們建立之後就無法更改

string s1 = "hello";

string s2 = s1;

s1 += " and goodbye.";

console.writeline(s2); //outputs "hello"

在原義字串中,用另乙個雙引號字元轉義雙引號字元,如以下示例所示:

string s = @"you say ""goodbye"" and i say ""hello""";

如果例項可以被公共訪問,將出現 lock (this) 問題。

如果 mytype 可以被公共訪問,將出現 lock (typeof (mytype)) 問題。

佳做法是定義 private 物件來鎖定, 或 private static 物件變數來保護所有例項所共有的資料。

除非類是 static 的,否則 c# 編譯器將為無建構函式的類提供乙個公共的預設建構函式,以便該類可以例項化。

結構型別的建構函式與類的建構函式類似,但是 structs 不能包含顯式預設建構函式,因為編譯器將自動提供乙個建構函式。此建構函式會將 struct 中的每個字段初始化為預設值。類和 structs 都可以定義具有引數的建構函式。帶引數的建構函式必須通過 new 語句或 base 語句來呼叫。類和 structs 還可以定義多個建構函式,並且二者均不需要定義預設建構函式。

基類的建構函式在執行建構函式塊之前被呼叫

從靜態方法中使用 base 關鍵字是錯誤的。

不能在結構中定義析構函式。只能對類使用析構函式。

乙個類只能有乙個析構函式。

應用程式域使應用程式以及應用程式的資料彼此分離,有助於提高安全性。單個程序可以執行多個應用程式域,並具有在單獨程序中所存在的隔離級別。在單個程序中執行多個應用程式提高了伺服器伸縮性。

必須先將程式集載入到應用程式域中,然後才能執行該程式集。有關更多資訊,請參見程式集和全域性程式集快取(c# 程式設計指南)。

乙個應用程式域中的錯誤不會影響在另乙個應用程式域中執行的其他**。

能夠在不停止整個程序的情況下停止單個應用程式並解除安裝**。不能解除安裝單獨的程式集或型別,只能解除安裝整個應用程式域。

C 版本知多少

以前一直沒搞懂c 到底有些什麼版。到底咋回事,一位研究生同事還問過我c 和visual c 有什麼關係?坑嗲了吧?他都做c 開發的人都不曉得。這裡來解釋一下 microsoft visual c 6 非託管的開發工具 microsfot visual c net 基本.net的託管開發工具 borl...

C 我們需要掌握多少語法細節

最近和人討論了一些程式設計中的方法,越發覺得學語法應該不求甚解。語法掌握的越精深,就越有能力閱讀和寫出晦澀的 但是有能力寫出晦澀 其實是一種缺陷。因為這會無形之中讓你不小心寫出晦澀的 因為你了解那種晦澀的寫法,所以你認為寫出來也無所謂。但晦澀 其實是劣質的 一種典型的壞 是 if a b func ...

C 過載解析 知多少?

在這裡先給大家提出乙個問題 編譯器怎麼知道我呼叫的這個函式應該是非模板函式?還是特化的模板函式?還是模板函式例項化?更或者是應該選擇哪乙個模板來例項化?可能上面的問題說起來有點繞,我用下面的 舉例吧 templatevoid func t a templatevoid func t a templa...