Effective C# 做法 22-23
做法 22 支援泛型的共變數與反變數 1. 這個 out 也是 共變數? public static bool TryParse (string? s, IFormatProvider? provider, out int result); 方法參數中的 out 關鍵字: 在 TryParse 方法中的 out int result 是一個輸出參數。這個 out 關鍵字...
Effective C# 做法 20-21
做法 20 以 IComparable<T> 與 IComparer<T> 實作排序關係 實作 public struct Customer : IComparable<Customer>, IComparable { private readonly string name; private double revenue; public Customer(string name) { this.name = name; } public int CompareTo(Customer other) { return name.CompareTo(other.name); } int IComparable.CompareTo(object? obj) { if (obj is Customer other) { return this.CompareTo(other); } throw new ArgumentException("Argument must be a Customer", nameof(obj)); } public static bool...
Effective C# 做法 18-19
做法 18 使用泛型 & 定義最少與足夠的約束 使用泛型 為什麼這三組執行期都共用相同的程式 List<string> strings = new List<string>(); List<Stream> streams=newList<Stream>(); List<MyClassType> myClassTypes=newList<MyClassType>(); JIT 編譯器識別出這些類型都是引用類型,因此可以...
Effective C# 做法 16-17
做法 16 絕不在建構元中呼叫虛擬函式 本章節有提到 Static Code Analyzer 工具,可以利用這些工具避免建構子中呼叫虛擬函式。 工具分別有 Visual Studio JetBrains Rider Visual Studio + ReSharper 針對 Unity 的 Static Code Analyzer 只...
Effective C# 做法 14-15
做法 14 減少重複的初始化邏輯 1. 建構子初始化程序讓一個建構子呼叫其他的建構子。 public class MyClass { private List<string> coll; private string name; public MyClass() : this(0, string.Empty) { } public MyClass(int count, string name) { coll = new List<string>(count); this.name = name; } } 2....