Time of Update: 2018-12-05
Effective C# Item18: Implement the Standard Dispose Pattern 釋放非託管資源是非常重要的一個環節。對於我們自訂的類型來說,如果需要釋放資源,那麼我們應當使用.Net Framework的標準模式來釋放非託管資源。標準模式使用IDisposable介面來顯式釋放資源,而當使用者忘記釋放時使用終結器(finalizer)來進行釋放。是否應當調用對象的終結器是通過GC(Garbage
Time of Update: 2018-12-05
Effective C# Item 35: Prefer Overrides to Event
Time of Update: 2018-12-05
Effective C# Item17: Minimize Boxing and Unboxing 在.Net中有值和引用兩種類型,它們是不一致的。.Net
Time of Update: 2018-12-05
Item 6: Distinguish Between Value Types and Reference Types
Time of Update: 2018-12-05
使用C#有兩種方法可以動態建立ODBC資料來源,這裡我用比較常用的SQL2000作為例子。 方法1:直接操作註冊表,需要引用Microsoft.Win32命名空間 Code highlighting produced by Actipro CodeHighlighter
Time of Update: 2018-12-05
Effective C# Item 2:Prefer readonly to const C#擁有兩種不同的常量:靜態常量(compile-time constants)和動態常量(runtime
Time of Update: 2018-12-05
Effective C# Item 16: Minimize Garbage 在我們使用C#時,GC(Garbage Collector)會非常好的協助我們完成對記憶體資源的管理,它會非常高效的清理沒有存在意義的對象。但是不管怎麼說,即便再高效的工作,頻繁的分配和銷毀堆中的對象也會降低效率。如果我們在程式中建立了大量的參考型別,那將會在一定程度上影響到執行的效率。
Time of Update: 2018-12-05
Effective C# Item 27: Avoid ICloneable
Time of Update: 2018-12-05
Effective C# Item 30: Prefer CLS-Compliant Assemblies .Net環境是與語言無關的:開發人員可以不受限制的將各種不同的.Net語言編寫的組件結合起來。我們必須建立遵從於CLS(Common Language Specification)的程式集以便其他程式設計語言的開發人員可以使用我們的組件。
Time of Update: 2018-12-05
Checked與Unchecked 對於因為整數類型參與算術操作和類型轉換時產生的“溢出異常”——System.OverflowException,在某些演算法來講不算真正的“異常”,相反這種溢出常常為程式所用。C#通過引入checked和unchecked關鍵字來控制這種特殊情況的需求。它們都可以加於一個語句塊前(如:checked{……}),或者一個算術運算式前(如:unchecked(x+y)),其中加checked標誌的語句或運算式如果發生算術溢位,
Time of Update: 2018-12-05
邊讀邊學感覺很有收穫,寫一下概要翻譯和自己的體會。歡迎大家拍磚 Chapter 1 C# Language Element Item 1: Always Use Properties Instead of Accessible Data Members Item 2: Prefer readonly to const Item 3: Prefer the is or as Operators to Casts Item 4:
Time of Update: 2018-12-05
Effective C# Item 23: Avoid Returning References to Internal Class Objects
Time of Update: 2018-12-05
Item13: Initialize Static Class Members with Static Constructiors
Time of Update: 2018-12-05
Effective C# Item 21: Express Callbacks with Delegates 爸爸:“兒子,去把院子裡的草割一下。我看會兒報。” 兒子:“爸爸,我把院子打掃乾淨了。” 兒子:“爸爸,我給割草機加了油。” 兒子:“爸爸,割草機發動不了。” 爸爸:“我來發動它。” 兒子:“爸爸,我把草割好了。”
Time of Update: 2018-12-05
Effective C# Item 31: Prefer Small,Simple Functions
Time of Update: 2018-12-05
Effective C# Item 28: Avoid Conversion Operators
Time of Update: 2018-12-05
Item12: Prefer Variable Initializers to Assignment Statements 一般來說一個類會有不止一個建構函式,有的時候會因此而造成成員變數和建構函式的脫節。解決這種問題的最好方法就是當變數聲明時就對其進行初始化,而不是初始化工作放到建構函式中。 我們應當在聲明成員變數的時候就對其進行初始化。public class MyClass{ private ArrayList _coll = new ArrayList();
Time of Update: 2018-12-05
Effective C# Item 20: Distinguish Between Implementing Interfaces and Overriding Virtual Functions 乍看之下,實現介面和重寫虛方法是相似的,它們都為一個聲明好的成員提供了定義。這種看法是錯誤的。實現介面和重寫虛方法是有很大區別的。在預設情況下,在介面中聲明的成員不是虛擬。衍生類別不能夠重寫基類中實現的介面。
Time of Update: 2018-12-05
經過了將近一個月的時間,終於完成了第一章的學習 + 翻譯。第一章的內容是比較基礎的,大部分內容可以看成是在講如何養成良好的編程習慣。除了GetHashCode()那一節之外,其他的內容都是經常會用到的編程技巧。分辨引用和實值型別、4種Equals()之間的關係等等也是.Net的基礎知識。 還有對於 Item 11: Prefer foreach Loops 中foreach和for迴圈比較時,書中所述迴圈3會在迴圈時判斷數組是否越界,這一點可能是有些問題的。通過MSIL
Time of Update: 2018-12-05
Effective C# Item 29: Use the new Modifier Only When Base Class Updates Mandate it 當我們需要重定義一個基類中非虛的成員時,我們可以使用new修飾符,但這並不意味著我們應該這樣做。這種重定義會引起行為上的歧義。大部分程式員看到下面的兩端代碼時都會認為如果這兩個類是繼承關係的話,它們的行為應該時相同的:object c = MakeObject();MyClass c1 = c as MyClass;c1.